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

重复建立窗体问题的引出spa

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

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

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

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

    解决代码以下:对象

 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         }

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

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

  代码以下:内存

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

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

相关文章
相关标签/搜索