代码之家  ›  专栏  ›  技术社区  ›  Dinesh

如何防止窗体多次打开

  •  2
  • Dinesh  · 技术社区  · 15 年前

    我有一份申请表,里面有几张表格。在那个表单中,我有一个系统设置表单。我必须从菜单和桌面上创建的快捷方式中打开此表单。

    我可以从两个地方分别打开表单。但问题是,它正在打开同一表单的两个独立实例。这意味着,首先,我已经单击菜单打开表单。现在我的表单实例被创建并显示在屏幕上。但是每当我点击桌面图标,它就会创建同一表单的另一个实例,而不是显示同一表单。。这意味着它显示了同一表单的两个实例。

    但我只显示一个窗体。我也试过在网上搜索。我没有找到任何信息。

    有人能帮我解决这个问题吗?任何建议都会对我很有帮助。

    6 回复  |  直到 14 年前
        1
  •  3
  •   Oliver    15 年前

    您需要一个实例。此构造在.NET框架中已可用。只需退房 this post 来自汉斯曼。

    注释 :我知道此类的命名空间是 VisualBasic . 但这不应妨碍您在C应用程序中使用它。它只是名称空间的名称。这对它的功能没有任何意义。(微软最好叫foo。在这种情况下,它会更受欢迎。)

        2
  •  2
  •   Dennis    15 年前

    在我看来,您需要一个互斥体来控制在给定的时间内只有一个应用程序实例在运行。

    http://iridescence.no/post/CreatingaSingleInstanceApplicationinC.aspx 更多详细信息

        3
  •  0
  •   m0s    15 年前

    您必须实现某种锁定机制,以只允许程序的一个实例运行。我想你的系统设置程序可以在程序启动时检查其他实例是否在计算机上运行,如果是这样,请终止,否则启动一个新实例。

        4
  •  0
  •   Greg Sexton    15 年前

    再加上一个链接,这篇文章似乎涵盖了(我的理解)你想做什么。

    http://dotnetperls.com/single-instance-windows-form

        5
  •  0
  •   Dinesh    15 年前

    我使用了信号量概念来控制这一点。每当打开表单时,我都在向注册表中写入一个条目。一旦表单关闭,我将删除此条目。

    所以,每当我试图打开表单时,它都会检查注册表项。在此基础上,它将打开窗体。

        6
  •  0
  •   James C    14 年前

    听起来你需要一个修改版的单体设计模式。尝试在类中具有一个公共静态方法,该方法在内部调用窗体的构造函数。然后,正如有人建议的那样,使用一个计数器变量来跟踪调用静态方法的可能次数,从而为您提供一个度量,如果创建了实例,您可以使用它来确保只有所需的数字。

    推荐文章