让程序中的某个Form某个时间只运行一个实例 [C#、WinForm]

来源:互联网 发布:网络经纪人安居客头像 编辑:程序博客网 时间:2024/06/05 16:07

      前面讲了让某个程序只运行一个实例的方法(用到了System.Threading.Mutex),这里讲让程序中某个Form只运行一个实例的方法:

情景是这样的,若在我们编写的某个App中托盘图标的右键弹出菜单选择"设置..."菜单项,就会弹出OptionForm窗口,但是在未关闭OptionForm时,再次点击"设置..."菜单,这时不希望再弹出一个OptionForm窗口了,应该怎么做呢?

 

      我的实现是在 static class Program {... }中加入全局静态布尔变量,供两个不同的窗体设置和检测,进而确保子Form只实例化一个。当然可能还有其他更多更好的方法,但我觉得我的这个方法好理解,实现起来也不难。

 

    //Program类

    static class Program

    {

            public static bool IsOptionFormOpened;  //*关键: 全局静态,用于窗口间传值

 

            [STAThread]

           static void Main()

           {

                  Application.Run(new FormMain());

           }

 

    }

 

    //在FormMain类中

    private void 设置OToolStripMenuItem_Click(object sender, EventArgs e)

    {

            if (!Program.IsOptionFormOpened)  //如果为真就不在new FormOption()了

            {

                formOption = new FormOption();

                formOption.Show();

                Program.IsOptionFormOpened = true;

            }

     }

 

     //在FormOption类中

     private void FormOption_FormClosed(object sender, FormClosedEventArgs e)

     {

            Program.IsOptionFormOpened = false;

     }

 

 

 

    (上例没有实现在FormMain中第二次单击"设置"按钮时,激活FormOption)

 

 

 

 

原创粉丝点击