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

本文介绍了如何在程序中通过全局静态布尔变量实现特定Form(如设置选项窗口)的单实例运行,避免多次触发时重复创建实例的问题。通过在FormMain类中检查变量状态并控制FormOption的实例化,以及在FormOption关闭时更新变量状态,确保了程序的高效性和用户体验。此方法易于理解且实现简单。
摘要由CSDN通过智能技术生成

      前面讲了让某个程序只运行一个实例的方法(用到了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)

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值