メインフォームがあり、このフォームのクラスで別のフォームを宣言します。このフォームは、メイン フォームがアンロードされるまで、メイン フォームと共に存続します。メインフォームにボタンがあり、このボタンをクリックするとメンバーフォームが表示されます(前述)。ユーザーがそのフォームを閉じたときにメンバーフォームが閉じないようにしたいので、そのフォームに次の FormClosing イベントハンドラーを追加しました。
private void MemberForm_FormClosing(object sender, FormClosingEventArgs e) {
if(e.CloseReason == CloseReason.UserClosing){
e.Cancel = true;
Hide();
}
}
それはそのフォームで問題なく機能します。ただし、ユーザーがメインフォームを閉じても、このフォームは閉じられず、どこかに隠されているため、アプリケーションが静かに実行されているように見えます。このフォームも閉じてほしいです。これは、メイン フォームに FormClosed イベント ハンドラーを追加してメンバー フォームを手動で閉じることにより、非常に簡単になります。手動で閉じても問題ありませんが、なぜそうしなければならないのですか? ユーザーがメインフォームを閉じると、メンバーフォームの FormClosing イベントが渡されたパラメーター FormClosingEventArgs で発生し、CloseReason がメインフォーム (UserClosing) の CloseReason と同じになるようです。私はこれを理解していません.フォームのCloseReasonは、ユーザーがXボタンをクリックしたときにのみUserClosingであると思いました.メンバーフォームのCloseReasonは「MainFormClosing」のようなものだと思いました.
デフォルトのように会員フォームを自動的に閉じる方法はありますか?
アップデート
メンバー フォームを表示するメソッド (ダイアログとして表示) は次のとおりです。
private void ShowMemberForm_Click(object sender, EventArgs e){
memberForm.ShowDialog();
}
しかし、メイン フォームをロードするときに、ShowMemberForm ボタンをクリックする必要がなく、最初にメイン フォームを閉じようとしても、メンバー フォームが閉じないため、これは問題ではないと思います。ありがとう!
アップデート
ここに何か奇妙なことがあります。行e.Cancel = true
をコメントアウトしたり、すべての FormClosing イベントハンドラーをコメントアウトしようとしましたが、問題はまだ残っています。これは非常に奇妙です。以前は問題なく動作していました。メンバー フォームを追加したばかりで、このフォームはスレッド処理に関連していますが、スレッドはメンバー フォームのボタンがクリックされたときにのみ開始されます。私はそのボタンをクリックしませんでした。