首先是我们进行窗口间的跳转,尤其注意的是winform程序里面的空间都是中线程安全的。但是注意的是如果你在一个线程中操纵另外的控件,这时候会提示你一个错误,这个错误的解决方法准备单独的在另一篇文章中来讲。
好了,这时候回到主题上吧,怎么来实现界面间的跳转吧!假设我们想要从Form1跳转到Form2,那么可以有以下的集中方法:
1. 使用form的show属性(注:show弹出来的是普通无模式窗体,与下个要讲的ShowDialog是有区别的)
Form2 frm=new Form2();
frm.show();
this.close(); //this 这儿是Form1对象,例如在跳转到Form2后关闭释放所持有的资源
this.Dispose(); //这也是为了释放资源
注:Dispose()也是用来释放资源的,但是不同的是如果窗体属于多文档界面应用程序的一部分且是不可见的,那么Close将不会释放窗体,从而我们必须自己手动调用Dispose来释放窗体资源。
还有要注意的是在无模式窗体上调用Close方法时候,不能调用Show方法使得窗体可见,因为窗体的资源已经被释放。所以若是要隐藏窗体,那么可以调用Control.Hide方法。
2.使用form的ShowDialog属性
Form2 frm=new Form2();
frm.ShowDialog();
this.Dispose();
使用ShowDialog和show产生的窗体到底有什么不一样呢?呵呵,其实ShowDialog弹出的窗体是一种有模式的对话框,并且当前活动的窗体为弹出的窗口的持有者。
窗体和对话框要么是有模式的,要么是无模式的。“模式”窗体或对话框必须关闭或隐藏,然后才能继续使用应用程序的其余部分
还有注意的是在多线程里面,调用用showdialog方法可以避免线程的错误,具体原因也不是很清楚。
3.可以在Program.cs中做手脚
我们知道,Program里面的程序是配置了我们整个应用程序的入口点。那么就修改吧,
将以下的本来的代码注释掉:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new logForm());
改成:
Form logFrm = new logForm(); //为第一个显示的窗体
if (logFrm.ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm()); //为第二个要弹出的窗体
}
然后只要在要跳转的代码段写如下:
this.DialogResult = DialogResult.OK; //this 指向的是logForm
这样就OK了。