c#桌面应用程序--窗体重复创建问题

重复创建窗体问题的引出

  连续单击添加窗体按钮,通过普通的在按钮事件方法中创建窗体,显示窗体的后果是,我们会发现,相同的窗体会重复不断的弹出。代码如下:

        //添加窗口事件方法
        private void tsmiAddStudent_Click(object sender, EventArgs e)
        {
            FrmAddStudent objFrmAddStudent = new FrmAddStudent();
            objFrmAddStudent.Show();
        }

  问题分析:事件单击,会动态的创建窗体,每次单击,都会新建窗体并显示,不关闭,则一直显示存在。

  解决办法:将创建的窗体设置为静态,使之在内存中唯一存在,每次单击都调用内存中存在的对象。

    解决代码如下:

 1 //显示添加窗口
 2         public static FrmAddStudent objFrmAddStudent = null;//设置为全局变量,以便其他窗体可以调用
 3         private void tsmiAddStudent_Click(object sender, EventArgs e)
 4         {
 5             if (objFrmAddStudent == null)//没有窗体对象
 6             {
 7                 objFrmAddStudent = new FrmAddStudent(); //创建窗体对象,new实例化对象
 8                 objFrmAddStudent.Show();//显示窗体
 9             }
10             else//窗体已经存在了
11             {
12                 objFrmAddStudent.Activate();//激活窗体,只能在最小化的时候起作用
13                 objFrmAddStudent.WindowState = FormWindowState.Normal;//设置窗体为正常大小状态
14             }
15         }

  通过上述方法,调试运行确实解决了重复创建窗体的问题,但是当关闭窗体后,再次单击按钮,发现窗体不能显示,端点调试没有问题,问题在哪呢?

  虽说窗体已经关闭,但因为对象是静态的,窗体关闭,程序没退出前,此窗体对象一直存在内存中,只是显示不出来。为此,需要在窗体关闭的时候,将静态窗体对象手动设置为空。对该窗体添加FormClosed事件:该窗体UI→属性→事件→找到FormClosed→双击添加事件并进入事件方法。

  代码如下:

1 //窗体关闭完执行的事件
2         private void FrmAddStudent_FormClosed(object sender, FormClosedEventArgs e)
3         {
4             FrmMain.objFrmAddStudent = null;//objFrmAddStudent对象在主窗体中声明
5         }

  注意对objFrmAddStudent对象为全局静态对象的理解。

 

转载于:https://www.cnblogs.com/17zuoyue/p/9782993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值