防止多个表单实例

时间:2010-02-01 00:55:12

标签: winforms forms instance

如何阻止打开多个表单?

我在表单上显示。但是用户可以再次单击主窗体和按钮,并打开另一个窗体实例。

5 个答案:

答案 0 :(得分:2)

两种选择,具体取决于您的需求:

  1. 使用ShowDialog代替Show,这将打开一个模态窗口。如果您在子表单打开时不需要主表单处于活动状态,这是显而易见的解决方案。

  2. 或者跟踪您在主窗体中已经打开的窗口,如果窗口已经打开则不执行任何操作。如果您希望用户在子表单已打开时能够使用主表单,可能需要打开其他表单。

答案 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
}