「検索」というボタンがあるフォームがあります。クリックすると、アイテムを検索するための別のフォームが開きます。ユーザーがこの 2 番目のフォームの X をクリックして閉じる場合、実際には閉じたくありません。(by によってsecondForm.visible = false) 非表示にしたいだけです。
必要なのはメソッドをオーバーライドすることだけであることがわかりましOnFormClosing()た。フォームクラスで実行しましたが、まったく実行されません。次に「検索」ボタンがクリックされたときに(実行new SecondForm()しようとするのではなく)、削除されたオブジェクト( )または何かsecondForm.visible = trueで作業できないという例外が発生するため、実行されないことがわかっていますsecondFormそのように。したがって、2 番目のフォームは表示されていないのではなく、閉じられています。
この時点で、私が必要としているのは、何らかの方法で (これは明らかにわかりません)、この新しいオーバーライド メソッドをボタン X に割り当てることだと考え始めています。
編集:
これは、クラスから 2 番目のオーバーライドされたメソッドです。
protected override void OnFormClosing(FormClosingEventArgs e)
{
base.OnFormClosing(e);
if (e.CloseReason == CloseReason.WindowsShutDown) return;
this.Visible = false;
}
これは、「検索」ボタンがクリックされたときに行うことです。
private void btnSearch_Click(object sender, EventArgs e)
{
if (subFormCreated)
subFormSearch.Visible = true;
else
initializeSubFormSearch();
}
private void initializeSubFormSearch()
{
subFormSearch = new SubForm(listaPersonas, actualMostrado);
subFormSearch.Show();
subFormCreated = true;
}
最後に、私が得る例外はObjectDisposedException. 正確なメッセージは次のようなものです(正しく翻訳しているかどうかはわかりません)ObjectDisposedException was unhandled. Cannot get access to the deleted object. Name of the object: SubForm.