4

フォームを閉じる前に終了を確認する MessageBox を表示したい。したがって、FormClosing イベントが作成されます。

  private void Form_Main_FormClosing(object sender, FormClosingEventArgs e)
  {
     //nothing here for now
  }

MessageBox が 2 回表示されています。デバッグ ツールは、どういうわけかコードが FormClosing() を 2 回超えていることを示しています。上記のように FormClosing() 内に何もない場合でも発生します。コード全体で FormClosing() を検索しましたが、サブスクライブされている場所は 1 つだけです。他の 2 つのプロジェクトに同じ FormClosing() がありますが、それは起こりません。誰でも私にポインタを与えることができますか?これは私には意味がありません。

4

3 に答える 3

2

最も可能性の高い「推測」は、イベントに 2 回サブスクライブしていることです。デザイナーを使用している場合は、自動生成されたデザイナー コードを確認してください。

イベントにブレークポイントを設定すると、コール スタック (http://msdn.microsoft.com/en-us/library/a3694ts5.aspx - デバッグ/ウィンドウ/コール スタック) をプルアップして、何が発生したかを確認できます。あなたがいる場所に到達するためにコードが実行されました。

イベント ハンドラーを直接呼び出すことは十分に可能です (ただし、間違って呼び出すことはおそらくないでしょう)。しかし、コール スタックを見ると、追跡するのに役立ちます。

Application.Exit最後に、Closing イベントの処理中に呼び出しなどを行っていないことを確認してください。これにより、2 回目の発火が引き起こされる可能性があると思います。

于 2012-05-25T23:04:59.477 に答える
2

わかりました。私は持っている:

InitializeComponent();

2か所で。それらの1つを削除した後、物事は本来の方法で機能します。

于 2012-05-29T15:51:18.667 に答える