2010-12-04 22 views
2

フォームの赤い十字ボタンをクリックすると、別のフォームを表示したいときはいつでも、イベントハンドラを閉じていても別のフォームを開くことができません。Form.closedイベントは発生しません

これは私が別のフォームを開くしようとしている方法です:

private void Form1_Closed(object sender, System.EventArgs e) 
{ 
    itemMaster.Show(); 

} 

誰がどのように私は私のrequirmentを有効にすることができますを教えていただけますか?

答えて

5

まず、あなたの代わりにClosedFormClosedイベントを使用する必要があります。

Closedイベントは、.NET Framework version 2.0で廃止されました。代わりにFormClosedイベントを使用します。MSDN page for the Form.Closed event

void Form1_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    // ... 
} 

第二に、あなたが実際にForm1FormClosedイベントに加入していることを確認してください:

Form1.FormClosed += Form1_FormClosed; 

WindowsフォームデザイナはInitializeComponentのどこかに類似した行を自動的に追加しました必要があります。そうでなければ、あなたのハンドラメソッドが呼び出されないのです。これはまだ解決しない場合は

FormClosedのinsteaf FormClosingイベントを処理してみてください。

+0

+1は、 'クローズドオーバー'フォームです。 –

4

次のステートメントを使用してアプリケーションを起動している場合:あなたはForm1を閉じると

Application.Run(new Form1()); 

、アプリケーションは終了します。あなたが別のフォームを開いた場合でも、アプリケーションが終了するとき、それは殺されます。あなたのForm1_Closedメソッドにブレークポイントを置くことによって、このようなケースであることを確認して、ブレークポイントがヒットしていることを見ることができますか?

この場合、コードは実行されますが、アプリケーションが終了すると、別のフォームも開くとすぐに閉じられます。

これを修正するには、Hide()フォーム1を閉じる代わりにそれを修正します。 Form_Closingイベントを処理し、this.Hide()を呼び出し、e.Cancel = trueを設定します。

+0

+1 - これも私の最初の考えでした。 –

0

フォームを終了し、閉じるボタンをクリックしてフォームを閉じる場合は、Close()を必ず使用してください。閉じるボタンをクリックしたときにDispose()のみを使用したため、私のform_closingイベントが発生しませんでした。

フォームを閉じる最も良い方法は、Close()Dispose()の両方を使用することです。

  • Close() =>フォームを閉じるときに何かをする必要がある場合は...
  • Dispose() =>フォーム(クリーンアップリソース)を破壊します。

    プライベートvoid _btnClose_Click(オブジェクト送信者、EventArgs e) { Close(); Dispose(); }

関連する問題