C#中WinForm程序退出方法技巧总结

一、关闭窗体

在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environment.Exit(0); 等他们各自的方法不一样,下面我们就来详细介绍一下。

1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;

2.Application.Exit();  强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;

3.Application.ExitThread(); 强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;

4.System.Environment.Exit(0);   这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。

二、登录窗体与主窗体的关闭

有许多人在用做c# 做登录窗体时会遇到这样的问题,登录成功后当前登录Form关闭,打开Main窗体,但Main窗体点关闭按钮后程序仍在进程仍旧在运行。

事实上,关闭Main窗体,只是关闭了Main窗体的线程,并没有关闭程序的主线程,即程序的主线程为登录From。

方法一:(FrmLogin 为登录窗体,FrmMain 为主窗体) //登录窗体中“登录”按钮的单击事件

private void button1_Click(object sender, EventArgs e)

{

if (txtName.Text == "123456")

{

FrmMain fm = new FrmMain();

fm.Show();

this.Dispose(false);

}

}

//主窗体的FormClosing事件或FormClosed事件代码

private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

{

Application.Exit();

}

//主窗体的FormClosed事件代码

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)

{

Application.Exit();

}

说明:FormClosing事件或FormClosed事件二选一,这两个的区别在于 FormClosed 在关闭后发生,窗体的关闭动作不可取消;

FormClosing 在关闭前发生,可取消,只要在里面使用 e.Cancel=true; 就可以让窗口不能关闭。

进阶技巧:在退出程序前弹出确认退出程序的对话框 //主窗体的FormClosing事件代码

private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

{

if (MessageBox.Show("真的要退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.Cancel)

{

e.Cancel = true;

}

}

主窗体的FormClosed事件代码

private void FrmMain_FormClosed(object sender, FormClosedEventArgs e)

{

Dispose();

Application.Exit();

}

小贴士:以下代码会导致显示确定退出的两次对话框,第一次单击“确定”第二次单击任何一个都会退出。

private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)

{

if (MessageBox.Show("真的要退出程序吗?", "退出程序", MessageBoxButtons.OKCancel) == DialogResult.OK)

{

Application.Exit();

}

else

{

e.Cancel = true;

}

}

分析:第一次单击了退出对话框的“确定”按钮后,Application.Exit();会导致触发第二次FrmMain_FormClosing()事件,所以就会显示两个确认退出的对话框,但第二对话框的选择对是否退出没有影响。可以改为判断如果单击了不是确认按钮则e.Cancel = true; ,确定按钮什么都不写或不做判断,如果要加上Application.Exit(); 可以将其添加到窗体的FormClosed事件中。  方法二:

//program.cs  程序入问的Main()方法代码,其中FrmLogin为登录窗体,FrmMain为主窗体

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

FrmLogin fl = new FrmLogin();

if (fl.ShowDialog() == DialogResult.OK)

{

Application.Run(new FrmMain());

}

}

//登录窗体中的“登录”按钮代码

private void button1_Click(object sender, EventArgs e)

{

if (txtName.Text == "123456")

{

this.DialogResult = DialogResult.OK;

this.Close();

}

}

winform关闭当前form_C#中WinForm程序退出方法技巧总结相关推荐

  1. C#中WinForm程序退出方法技巧总结

    在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.ExitThread(); System.Environme ...

  2. winform4、C#中WinForm程序退出方法(释放资源)

    winform4.C#中WinForm程序退出方法(释放资源) 有以下方式 1.this.Close(); 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干 ...

  3. cad中lisp文件给恶作剧_CAD中LISP程序使用方法

    学习园地 | 字号 订阅 1. 对于提供附件下载的,把附件下载就可以了 2. 对于提供的源 LISP 代码, 把代码拷贝. 粘贴到一个文件, 自己起个名或者若 程序里面注释推荐了文件名, 就用推荐的, ...

  4. 制作移动端手机网站过程中的SEO优化方法技巧

    据国内三大运营商数据来看,中国的手机用户数已达10亿,超过2/5的移动用户每个月都会从手机终端访问网页,如今的移动端手机网站比例肯定有提升,但是对于这些存在的移动版本网站来说,马海祥查看了很大一部分手 ...

  5. C#中WinForm程序退出方法

    1.this.Close();   只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出: 2.Application.Exit();  强制所有消息中 ...

  6. winform关闭当前form_C#如何关闭FORM窗口

    展开全部 在设计e68a8462616964757a686964616f31333366303132界面双击需要关闭窗口的按钮后,跳到代码设计页面,然后输入: 1.this.hide();//这是隐藏 ...

  7. c语言中阻止程序退出的函数,(转)C语言中Exit函数的使用

    C语言中Exit函数的使用 exit() 结束当前进程/当前程序/,在整个程序中,只要调用 exit ,就结束 return() 是当前函数返回,当然如果是在主函数main, 自然也就结束当前进程了, ...

  8. iOS 4中禁止程序退出后保留在后台的方法

    只需要在plist中加入UIApplicationExitsOnSuspend. Opting Out of Background Execution If you do not want your ...

  9. Matlab中只运行m文件中部分程序的方法

    现有一个m文件,里面有十几个分程序.有什么方法可以使得m文件中中间某一部分程序不运行而运行其他的程序: 解决办法: (1)选中要运行的程序段,右键选择运行选中的程序 (2)用双百分号%%分节,用ctr ...

最新文章

  1. tf.get_variable
  2. python基础教程第四版-python基础教程第4版pdf
  3. String类为什么是final
  4. nssl1305-最大值【dp,数学】
  5. java final static
  6. Broken Keyboard (a.k.a. Beiju Text) UVA - 11988 (链表)
  7. 零基础入门神经网络:从原理、主要类型到行业应用
  8. [转载] python3 闭包
  9. 单片机c语言赚钱,单片机C语言程序设计实训100例(从初级入手).pdf
  10. 机器视觉技术的应用领域
  11. 小程序上传大小限制问题解决
  12. MATLAB角度转换为弧度
  13. LT6105电流检测放大器介绍
  14. 指数族分布(2)——对数配分函数和MLE与充分统计量
  15. flac格式歌曲如何转换成mp3格式,flac转mp3详细图文教程 1
  16. 每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!...
  17. 第13章 可视化实战
  18. 相机跟频闪灯(LAMP-S25)、爆闪灯(LAMP-F25)、频爆一体灯(LAMP-SF25)信号线如何连接?
  19. java 2%3等于多少,Java别说取余(%)运算简单你真的会吗
  20. USB 协议整理 四:USB概述及协议基础(三)

热门文章

  1. Nginx服务的信号控制之USR2
  2. 完成DI 依赖注入功能
  3. AOP 代理(AOP Proxy)
  4. MyBatis常用配置解析-mapper标签
  5. Spring抽取jdbc配置文件
  6. 用户操作-查询所有用户操作
  7. FastDFS配置手册trackerstorage
  8. Nginx教程-http_core_module变量
  9. 为什么人们默认 x86 代表 32 位处理器
  10. Redis持久化方式的选择