トップ回答者
MessageBoxが2回表示されるのですが?

質問
回答
すべての返信
-
それでは、質問を変更します。
プライベート関数が2回呼ばれてしまう理由は何でしょうか?
下記のように、MainPage.xamlファイル内に記述しています。
<Button Name="BtnCloseWindow" Content="終了" Grid.Column="5" Grid.Row="0" Height="25" Click="ColseWindow"></Button>
で、MainPage.xaml.vbファイル内に下記のようにプライベート関数の「CloseWindow」をButtonコントロール内のClickで呼んでます。
Private Sub ColseWindow(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles BtnCloseWindow.Click
MessageBox.Show("システムを終了しますか?", "システム終了", MessageBoxButton.OKCancel)
End Sub
それだけの処理です。
ブラウザ表示して、「終了」ボタンをクリックすると、「システムを終了しますか?」というメッセージが2回表示されてしまいます。
プライベート関数が2回呼ばれてしまうという理由がどうしてもわかりません。
プライベート関数を1回のみにする方法はあるのでしょうか?
宜しくお願い致します。2009年11月18日 1:47 -
Private Sub ColseWindow(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs)
MessageBox.Show("システムを終了しますか?", "システム終了", MessageBoxButton.OKCancel)
End Sub
こうしてみてください。
WPF や Silverlight では XAML に書かれている Click="CloseWindow" といった部分から自動的に CloseWindow() メソッドをイベントハンドラとして登録します。
なので、「Handles BtnCloseWindow.Click」 はいらないはずです。
または、反対に XAML の 「Click="CloseWindow"」 を消して、「Handles BtnCloseWindow.Click」 を残すというのでもいいようです。
(というか、今やってみたらちゃんと動きました。普段はあまり VB は使わないので初めて知りました。VB コンパイラがイベントハンドラを登録するコードを生成してくれるんでしょうね)
というわけで、XAML の 「Click="CloseWindow"」 と、コードの 「Handles BtnCloseWindow.Click」 の両方があるとイベントハンドラが二度登録されるため二回呼び出されるんでしょう。
青柳 臣一 (Shinichi Aoyagi)- 回答の候補に設定 AzuleanMVP 2009年11月20日 13:44
2009年11月18日 4:28