新浪博客

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

2016-06-09 09:34阅读:
在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());
br>
}
需要注意的是,不能使用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()方法来使得窗口可见。






我的更多文章

下载客户端阅读体验更佳

APP专享