如何使用C#停止窗体重新打开?

时间:2011-05-19 07:58:03

标签: c# .net winforms mdi event-handling

我正在使用包含菜单的MDIParent窗口表单,当我再次点击同一菜单时,它会打开一个新窗口。那么如果窗口已经打开,如何阻止它重新打开?每次点击都不应显示窗口形式。

4 个答案:

答案 0 :(得分:2)

使用Application.OpenForms属性。

Boolean found = 
   Application.OpenForms.Cast<Form>().Any(form => form.ID == "TargetFormID"

if (!found) 
{ 
    // Open a new instance of the form //
}

答案 1 :(得分:1)

2种方式:

方式1,旗帜:
为开放表格保留一个标志(或标志列表) 每次打开表单(创建一个新的())时,将标志设置为“true” 表单关闭时,将标志设置为false 在按钮的单击事件中,检查标志以在创建新表单之前查看表单是否已打开。

方式2,保留参考:
在主表单中保留您正在使用的所有表格的参考 当表格未打开时,将它们初始化为null 当您打开新表单时,请设置对它的引用 在按钮的单击事件上,在创建新表单之前检查表单的引用是否为空。

我更喜欢第二种方式。当您引用所有子表单时,可以更轻松地控制资源。

答案 2 :(得分:0)

您可以维护打开表单的列表(并检查onClick事件中的列表),或者在窗体打开或关闭时禁用/启用菜单项。

答案 3 :(得分:0)

另一个原因是在Property中创建Form,保留您使用的默认实例。

private static Form _defaultInstance;
public static Form DefaultInstance()
{
    get {
        if(_defaultInstance == null || _defaultInstance.IsDisposed)
        {
            _defaultInstance = new yourTypeHere();
        }

        return _defaultInstance;
    }
}

现在你总是通过这个属性访问你的窗口:

yourTypeHere.DefaultInstance.Show();