【C#】WinForm
一、关闭窗体与退出程序
1 private void metroButton2_Click(object sender, EventArgs e) 2 { 3 4 Close(); //关闭当前窗体。如果不是主窗体,无法退出程序;有托管线程(非主线程),也无法干净退出 5 6 Application.Exit(); //强制所有消息终止,关闭所有窗体。有托管线程(非主线程),也无法干净退出 7 8 Application.ExitThread(); //强制终止调用线程上的所有消息。同样面临其它线程无法正确退出的问题 9 10 Environment.Exit(0); //这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 11 }
二、登录窗体(FrmLogin)和主窗体(FrmMain)
方法一:
Login按钮代码:
1 private void metroButton1_Click(object sender, EventArgs e) 2 { 3 if (true) 4 { 5 DialogResult = DialogResult.OK; 6 Close(); 7 } 8 }
Program.cs Main方法代码:
1 static void Main() 2 { 3 Application.EnableVisualStyles(); 4 Application.SetCompatibleTextRenderingDefault(false); 5 6 FrmChange fr = new FrmChange(); 7 if (fr.ShowDialog()==DialogResult.OK) 8 { 9 Application.Run(new Form1()); 10 } 11 12 }
方法二:
Login按钮代码:
1 //Login 2 private void metroButton1_Click(object sender, EventArgs e) 3 { 4 if (true) 5 { 6 Form1 fr = new Form1(); 7 fr.Show(); 8 Dispose(false); 9 } 10 }
主窗体关闭:
FormClosing事件:在窗体关闭前发生,窗体的关闭动作可取消
FormClosed事件:在窗体关闭后发生,窗体的关闭动作不可取消
1 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 2 { 3 if (MessageBox.Show("确认退出程序吗", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel) 4 { 5 e.Cancel = true; 6 } 7 else 8 { 9 //Application.Exit(); 10 } 11 }
备注:如果不将Application.Exit()方法注释掉,则会显示两个确认退出的对话框,但第二对话框的选择对是否退出没有影响