如何使用 C# 阻止窗口窗体在单击时重新打开?

发布于 2024-11-08 17:07:20 字数 93 浏览 0 评论 0原文

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

I am using MDIParent window form which contains menus, when I click on same menu again it open a new window. so how to stop this from reopening the window if it is already open? It should not display window form every time on click.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

﹏雨一样淡蓝的深情 2024-11-15 17:07:20

使用 Application.OpenForms 属性。

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

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

Use Application.OpenForms property.

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

if (!found) 
{ 
    // Open a new instance of the form //
}
青衫负雪 2024-11-15 17:07:20

2种方式:

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

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

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

2 ways:

Way 1, flags:
Keep a flag (or list of flags) for the open forms.
Each time you open the form (create a new() one) set the flag to "true".
When the form closes, set the flag to false.
In the button's click event, check the flag to see if the form is open before creating a new one.

Way 2, keep a reference:
Keep a reference in the main form to all the forms you're using.
Initialize them as null when the forms aren't open.
When you open a new form set the reference to it.
On the button's click event check if the form's reference is null before you create a new one.

I prefer the second way. It's easier to control your resources when you have references to all your sub-forms.

若能看破又如何 2024-11-15 17:07:20

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

You could maintain a list of open forms (and check the list in the onClick event), or disable/enable the menu item when the form opened ot closed.

土豪 2024-11-15 17:07:20

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

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

        return _defaultInstance;
    }
}

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

yourTypeHere.DefaultInstance.Show();

Another why would be to create a Property in the Form which keeps the default instance you use.

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

        return _defaultInstance;
    }
}

And now you always access your window through this property:

yourTypeHere.DefaultInstance.Show();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文