moonmile solutions 分室

ソフトウェア開発者の情報収集をリアルタイムで垂れ流し...という具合に行きます。

VB の Hanlders

XAML にボタンクリックのイベントハンドラを付けるときは、XAML 自体に Click="" を書くのが普通なのだが、VB の場合は、もともとある Handlers によって、コードの挙動が変わる。

 

XAML の Button に名前がついていないときは、プロパティのイベントで「Button_Click」とすると、

Private Sub button1_Click(sender As Object, e As RoutedEventArgs)

End Sub
のように、C# と同じ出力がされて、XAMLに Click="button1_Click" 属性がつくのだが、

 

ボタン自体に、x:Name="button1" としておくと、

    Private Sub button1_Click(sender As Object, e As RoutedEventArgs) Handles button1.Click

    End Sub

のほうに、Handles が使われて、XAML には Click="" がつかない。

 

前者は、Command パターンで作られて、後者は ボタンコントロールのClickイベントに割り当てられるというパターンの違いがある。WithEvents があるかどうかの違いになるので、ソースコードレベルで使いまわしをするとき(コピーアンドペーストとか)は注意が必要。