我正在使用包含菜单的MDIParent窗口表单,当我再次点击同一菜单时,它会打开一个新窗口。那么如果窗口已经打开,如何阻止它重新打开?每次点击都不应显示窗口形式。
答案 0 :(得分:2)
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();