如何阻止打开多个表单?
我在表单上显示。但是用户可以再次单击主窗体和按钮,并打开另一个窗体实例。
答案 0 :(得分:2)
两种选择,具体取决于您的需求:
使用ShowDialog
代替Show
,这将打开一个模态窗口。如果您在子表单打开时不需要主表单处于活动状态,这是显而易见的解决方案。
或者跟踪您在主窗体中已经打开的窗口,如果窗口已经打开则不执行任何操作。如果您希望用户在子表单已打开时能够使用主表单,可能需要打开其他表单。
答案 1 :(得分:2)
做类似的事情:
SingleForm myform = null;
void ShowMyForm_Click(object sender, EventArgs e)
{ if (myform == null)
{
myform = new SingleForm();
}
myform.Show();
myform.BringToFront();
}
答案 2 :(得分:1)
强制您的表单对象遵循单例模式
答案 3 :(得分:0)
禁用主窗体,直到子窗体消失,或禁用该按钮。
button_onClick(object Sender, EventArgs e)
{
Button btn = sender as Button;
btn.Enabled = false;
Form myform = new MyForm();
myform.Show();
}
当然,如果你想要模态行为,你真的应该使用form.ShowDialog()
而不是form.Show()
。
答案 4 :(得分:0)
我更喜欢使用Generics和延迟加载来处理我的表单。由于我的所有表单都继承自基类,因此我可以使用相同的方法将表单放到前面,将表单发送到后面,销毁它们,启动它们等等。
如果您保留一个负责管理任何已加载表单的表单管理器类,您可以将任何表单带到您想要的前面,或者阻止特定表单能够返回,除非满足某些条件。
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
}