我有一个应用程序,它有一个用户输入对话框。我希望这个对话框只允许在任何给定时间打开一次。通常我会通过模态对话框来实现这一点,但我需要用户能够在对话框打开时与父表单进行交互。我试图通过这样的代码实现这一点:
private static Boolean dialogShown = false;
public Dialog()
{
if (!dialogShown )
{
dialogShown = true;
InitializeComponent();
}
else
{
this.Close();
}
}
private void Dialog_Closed(object sender, EventArgs e)
{
dialogShown = false;
}
这个问题在于构造这个形式IE的代码是可能的
public void ShowDialog()
{
Dialog dialog = new Dialog();
dialog.Show();
}
在尝试显示已关闭的表单时抛出异常。它不会一直发生,但很容易重复。所以问题是,这样做的正确方法是什么,因为我的互斥锁在这里不可靠。
我在这里看到了一些其他类似的问题,但在大多数情况下,对于用例而言,除了对话之外,还有更好的解决方案。在这种情况下,它必须是非模态单例对话框。
-Edit,我不应该使用Singleton,因为它引起了一些混乱。我认为有一个微妙的区别,我只担心在任何给定的时间都会打开这个对话框的单个实例,并且每次都不关心它是同一个实例。我也不应该使用变量名称Visible,因为这也是误导性的。我编辑了代码以避免这种情况。为误导性的帖子道歉...
答案 0 :(得分:2)
Close()
会丢弃您的对话框,阻止您重复使用它
请改为呼叫Hide()
。
其他一些说明: