我需要帮助解决以下问题。
我正在创建一个带有 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 != null,即使frm1已关闭。我认为问题在于frm1,因为它作为引用存储在FManage中,所以没有告诉FManage它为空。FManage只存储表单的初始状态,类似于静态变量。我是 OOP 的新手,我真的在寻找解决这个问题的最佳方法。
我的第一个解决方案是在frm1关闭之前,可能在 FormClosing 事件中,将消息发送回FManage类以将frm1设置为 null;但是,为了做到这一点,frm1类需要了解FManage,而现在它不知道。FManage知道frm1,而不是相反。分享不是相互的。仅供参考,frm1定义为我的类定义后的方法:
public class FManage
{
frmOne frm1;
...
}
任何有关如何解决此问题的建议将不胜感激。