Winforms 防止多个表单实例
如何防止打开多个表单Winforms 防止多个表单实例,winforms,forms,instance,Winforms,Forms,Instance,如何防止打开多个表单 是的。在表单上显示,但用户可以再次单击主表单和按钮,然后打开另一个表单实例。两个选项,具体取决于您的需要: 使用而不是Show,这将打开一个模式窗口。如果在子窗体打开时不需要主窗体处于活动状态,这是一个显而易见的解决方案 或者跟踪主窗体中已打开的窗口,如果该窗口已打开,则不执行任何操作。如果您希望用户能够在子窗体已打开时使用主窗体,可能需要打开其他窗体,则需要执行此操作 禁用主窗体直到子窗体消失,或者禁用按钮 button_onClick(object Sender, Ev
是的。在表单上显示,但用户可以再次单击主表单和按钮,然后打开另一个表单实例。两个选项,具体取决于您的需要:
Show
,这将打开一个模式窗口。如果在子窗体打开时不需要主窗体处于活动状态,这是一个显而易见的解决方案禁用主窗体直到子窗体消失,或者禁用按钮
button_onClick(object Sender, EventArgs e)
{
Button btn = sender as Button;
btn.Enabled = false;
Form myform = new MyForm();
myform.Show();
}
当然,如果需要模态行为,您确实应该使用form.ShowDialog()
,而不是form.Show()
。执行以下操作:
SingleForm myform = null;
void ShowMyForm_Click(object sender, EventArgs e)
{ if (myform == null)
{
myform = new SingleForm();
}
myform.Show();
myform.BringToFront();
}
强制表单对象遵循单例模式我更喜欢使用泛型和延迟加载来处理表单。因为我所有的表单都继承自基类,所以我可以使用相同的方法将表单带到前面,发送到后面,销毁它们,启动它们,等等 如果您保留一个负责管理任何已加载表单的表单管理器类,则可以将任何表单带到前端,或者阻止特定表单返回,除非满足某些条件
public void LoadForm<T>() where T : MyNameSpace.MyBaseForm
{
// Load all your code in this joint and just call it when you
// need a form. In here, you can determine if a copy of the form
// already exists and then bring it forward or not
}
public void LoadForm(),其中T:MyNameSpace.MyBaseForm
{
//将所有代码加载到此关节中,并在需要时调用它
//需要一份表格。在这里,您可以确定是否需要一份表格的副本
//是否已存在,然后将其向前推进
}
这样更好,但这并不能防止用户意外或故意将主窗体再次带到前面。他没有说主窗体必须留在后台…他只是不希望用户在单击按钮时能够打开另一个窗体…;)但是对于编辑的thx。。。哦…我想我是误读了。我在想,当一个按钮点击时,会打开第二个表单……idkI打算添加.ShowDialog()作为另一个选项,但John K.和Johannes抢先了我一步