locked
MessageBoxが2回表示されるのですが? RRS feed

  • 質問

  • こんにちは。
    またまた初歩的なことで大変に恐縮です。

    ある処理でMessageBoxを使っているのですが、2回同じメッセージが表示されてしまいます。
    1回表示にするためにはどうしたらいいのでしょうか?
    皆様教えてください。
    2009年11月16日 8:43

回答

  • お世話になっています。
    青柳 臣一 (Shinichi Aoyagi)様。本当にありがとうございました。
    無事に解決しました。
    本当にありがとうございました。
    また、何かあったらお力をお願い致します。
    2009年11月19日 7:41

すべての返信

  • どんなプログラム書いてるか、とかの情報がないと答えられる人はいないよーな。。。

    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年11月16日 10:24
  • どんなプログラムといわれましても、MainPage.xaml.vbファイル内のあるプライベート関数内に下記の通り単純にメッセージボックスを表示させるだけなのですが。

    MessageBox.Show("キーワードをご確認ください。", "キーワード検索結果", MessageBoxButton.OK)

    これだけでは、情報少ないでしょうか?

    2009年11月17日 6:41
  • これだけの情報だと、プライベート関数が2回呼ばれてるんじゃないですか、って答えしかでてこないと思いますけど。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)
    2009年11月17日 10:18
  • それでは、質問を変更します。
    プライベート関数が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
  • お世話になっています。
    青柳 臣一 (Shinichi Aoyagi)様。本当にありがとうございました。
    無事に解決しました。
    本当にありがとうございました。
    また、何かあったらお力をお願い致します。
    2009年11月19日 7:41
  • 回答としてマークは、回答してくれた人の中から役に立った発言につけるものですよ~^^;


    かずき Blog:http://blogs.wankuma.com/kazuki/
    2009年11月20日 4:03