加载中…
个人资料
zqf135
zqf135
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,208
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VS C#中关闭一个窗口、打开另外一个窗口的方法和注意事项

(2016-06-09 09:34:35)
标签:

winform

显示窗口

关闭窗口

application.run()

分类: windows编程
在VS中使用c#开发winform应用程序,经常需要关闭一个窗口的同时开启另外一个窗口,如何实现?
实现方法如下:
假定有一个窗口Form1 和 Form2,希望在Form1关闭的同时显示Form2。或者在点按Form1中的某个按钮button1时关闭Form1, 并显示Form2.

在button的click事件中,或者在form的formclosed事件可用如下代码:

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.Show();
            //Application.Run(new Form2());           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            this.Close();
            Form2 frm2 = new Form2();
            frm2.Show();
           //Application.Run(new Form2()); 
        }
需要注意的是,不能使用application.run方法来做,这个时候会启动另外一个线程(我的理解),会报错。

与此同时还要注意,光有上面的代码不够,还要修改program.cs文件。如果不修改,则上面的语句并不起作用,上面的并不显示form2.
在Program.cs的Main方法中,修改成如下代码:
            //Application.Run(new Form1());
            Form1 frm1 = new Form1();
            frm1.Show();
            Application.Run();   //这里开启单个线程,开启一个消息循环
也就是必须将原来的Application.Run(new Form1())改成上面的代码。这样才可以正常显示。


之所以出现只能关闭form1,不能显示form2的情况,症结在application.run()上。
根据MSDN的解释:
Run()

在没有窗体的情况下,在当前线程上开始运行标准应用程序消息循环。

Run(Form)

在当前线程上开始运行标准应用程序消息循环,并使指定窗体可见。

可以看到,两个方法的情况是有区别的。我理解就是在单个线程上开始了一个新的消息循环,这是不被允许的。所以不要使用application.run()方法来使得窗口可见。



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有