以下の問題を解決するのに助けが必要です。
MDI インターフェイスを使用して Windows フォーム アプリケーションを作成しています。私のアプリケーションでは、基本的にすべての子フォームのすべての開閉を処理するクラスを作成しました。これをFManageと呼びましょう。さらに、フォーム インスタンスが開いているかどうかもチェックします。その場合、ユーザーはフォームの別のインスタンスを開くことができません。ここに私の問題があります。ユーザーがウィンドウを開くように求められた場合、FManageは次のコードを実行します。
if (frm1 == null)
{
frmOne = new frm1();
frmOne.MdiParent = Main.ActiveForm; //Main is the parent form
}
frmOne.Show();
ウィンドウが最初に開かれたときに、このコードが正常に機能するようになりました。frm1が閉じられ、再度開くように求められたとします。上記のコードが再度実行されますが、frm1は NULL と等しくありません。FManageクラスの上記のコードにブレーク ポイントを設定したところ、 frm1が閉じられていても、 frm1 != nullが表示されます。問題は、frm1がFManageに参照として格納されているため、FManageが null であることを伝えていないことだと思います。FManageは、静的変数と同様に、フォームの初期状態を格納するだけです。私はOOPが初めてで、この問題を解決する最善の方法を本当に探しています.
私の最初の解決策は、おそらく FormClosing イベントでfrm1が閉じる前に、メッセージをFManageクラスに送り返してfrm1を null に設定することです。ただし、これを行うには、frm1クラスがFManageについて知る必要がありますが、現在はそうではありません。FManageはfrm1について知っていますが、その逆ではありません。共有は相互ではありません。参考までに、クラスが定義された後にfrm1がメソッドとして定義されます。
public class FManage
{
frmOne frm1;
...
}
この問題を解決する方法についての提案は大歓迎です。