首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阻止显示一个窗体的多个实例

阻止显示一个窗体的多个实例
EN

Stack Overflow用户
提问于 2010-01-07 12:51:00
回答 8查看 17.1K关注 0票数 8

我正在开发一个应用程序,其中有一个主窗体和几个可以同时使用的其他窗体。当用户单击打开另一个表单时,我希望这样,如果表单已经打开,则单击该表单的按钮不会再次打开该表单。

showDialog不起作用,因为用户仍然需要访问主窗体上的控件。

这是我的帮助窗口的代码,所有其他窗体都以相同的方式打开。

代码语言:javascript
运行
复制
private void heToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form help = new help();
            help.Show();
        } 
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-01-07 13:17:40

使用单例:

代码语言:javascript
运行
复制
class HelpForm : Form
{
   private static HelpForm _instance;
   public static HelpForm GetInstance()
   {
     if(_instance == null) _instance = new HelpForm();
     return _instance; 
   }
}

.......

private void heToolStripMenuItem_Click(object sender, EventArgs e)
{
     HelpForm form = HelpForm.GetInstance();
     if(!form.Visible)
     {
       form.Show();
     }
     else
     {
       form.BringToFront();
     }
}
票数 11
EN

Stack Overflow用户

发布于 2010-01-07 13:18:16

或者,您也可以使用应用程序的打开窗体来查看它是否已打开

代码语言:javascript
运行
复制
btn_LaunchHelp(object o, EventArgs e)
{

   foreach (Form f in Application.OpenForms)
   {
       if (f is HelpForm)
       {
           f.Focus();
           return;
       }
   }

   new help().Show();
}

编辑:更清楚地说,这允许用户随时关闭帮助,并且比保存对帮助窗口的引用更容易管理。没有什么需要清理的,也没有什么需要维护的。

票数 15
EN

Stack Overflow用户

发布于 2010-01-07 12:57:21

根据您想要管理的方式,您可以做一些事情:

当窗体在调用窗体中处于disposed

  • Manage状态时,
  1. 使用带有全局跟踪锁的Singleton pattern,如果窗体已经显示该窗体,则只需调用“”,但不显示它,这样您就可以管理单个引用,并根据需要显示它
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2018272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档