在C#开发中,可能会遇到,要关闭当前Form,并且打开一个新的Form。但是我们发现并没有想象的那么随意,如果关闭了当前的Form,新的Form也会随之关闭,因为都是同一个线程的。
例如:
Form1 tmp = new Form1(); tmp.Show(); this.Close(); //然后新窗口也一起给关闭了
1.隐藏法,原理就是把旧窗口隐藏掉,再打开新窗口。
//新建一个NewForm窗口(NewForm是自己定义的Form) NewForm tmp=new NewForm() this.Hide();//隐藏现在这个窗口 tmp.Show();//新窗口显现
这种方法旧的窗口依旧会占内存,因此如果用来做登陆窗口不太好,但是如果旧窗口是以后还需要恢复的主窗口,这个方法便很不错,因为以后可以关掉新窗口,再用旧窗口.Show() 就可以恢复旧窗口了。
所以这个方法适合在主窗口和子窗口间传递信息。
2.再来便是为登录窗口设计的方法了。
在Program.cs里这样定义:
static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //新建Login窗口(Login是自己定义的Form) Login Log = new Login(); //使用模式对话框方法显示Log Log.ShowDialog(); //DialogResult就是用来判断是否返回父窗体的 if (Log.DialogResult == DialogResult.OK) { //在线程中打开主窗体 Application.Run(new Main()); } }
在登陆窗口中验证结束后要赋值Log.DialogResult = DialogResult.OK 。
登录窗口完成任务后会被直接关掉,主窗口就打开了
3.开新线程
推荐使用这种方法!!
public static void ThreadProc() { Application.Run(new Form()); } private void button1_Click(object sender, EventArgs e) { System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc)); t.Start(); } static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } //创建一个新的线程 来运行窗口
- 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
- 文章链接:http://www.carlstedt.cn/archives/933 (转载时请注明本文出处及文章链接)
相关文章
- 本文无相关文章
- 本文无相关文章
发表评论
快来吐槽一下吧!