我们在做winform时会有一个非常常见的功能,比如有一个专门用来登陆的窗体,一般来说登陆的窗体点击登陆后会关闭当前登陆的这个窗体打开程序的主窗体。如果直接想的话就会写出

private void btnLogin_Click(object sender,EventArgs e)

{

this.Close();

MainForm mf = new MainForm();

mf.Show();

}

新手的一般会这么想,但是实际运行后发现当执行到this.Close()的时候整个应用程序就会结束。这是因为窗体应用程序是使用windows消息会话在当前线程运行的你当前窗体。实际上在运行winform的时候是运行的Program.cs这个启动类。

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new LoginForm());

}

当LoginForm被Close掉过后就会跳出窗体的消息循环,Main函数也执行完了程序就会被结束掉。这里就有另外一种方法就是不关闭线程启动的窗口将它隐藏然后show出其他窗口。(当你拥有多窗口时其实都是在线程窗口的基础下创建的,所以说当你关闭子窗口时程序依然按照你的逻辑在运行,但是一旦关闭线程窗口所有窗口都会被关闭如果Main方法里没有其他代码的话就会直接关闭应用程序)

private void btnLogin_Click(object sender,EventArgs e)

{

this.Hide();

MainForm mf = new MainForm();

mf.Show();

}

这时就可以实现登陆窗口的假关闭。如果你只有很少的窗口需要隐藏那还可以这样,但是如果你的程序有大量的这种操作那会非常占用内存,况且一直在内存里的话也很容易被其他恶意程序劫持从而泄露隐私。

既然程序是因为Main函数执行完后才结束的,那么我们其实可以在Program这个启动类里动手。

//这里我们写个类,类有一个静态成员用来监视线程窗口的关闭类型

public class FormHelper()

{

public static bool CloseType = false;

}

//窗体类的按钮点击事件

private void btnLogin_Click(object sender,EventArgs e)

{

FormeHelper.CloseType = true;

this.Close();

}

//在Program.cs里后面加上判断与要开启的窗口

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new LoginForm());

if(FormState.CloseType)

{

Application.Run(new MainForm());

}

}

这里CloseType用来监视登陆窗体是不是因为我登陆成功所以才关闭的,如果不是登陆成功关闭,比如点了取消按钮或者是右上角的叉叉都不会改变当前值然后Program里判断为false就不会执行其他的,应用程序就会被关闭。如果判断为true说明是登陆成功关闭的,我们不想这个时候结束应用程序而是打开程序的主窗体这个时候在执行Application.Run();里面开启一个新窗体就完美解决了。

ps:一直在弄bs今天突然要求一个cs项目,想起来以前新手时期踩过的坑,写的比较面向纯新手,可能也有些问题欢迎dalao指教。。还有知乎这个代码块为什么我第一个插入的时候是有关键字变色的,后面就没了很怪。。

c#退出窗口跳转_关于winform如何如在关闭一个窗口时打开另外一个窗口相关推荐

  1. 百度地图鼠标滑过marker时打开自定义信息窗口

    在百度地图上实现鼠标滑过marker时打开自定义的信息窗口,当鼠标滑出marker时关闭已打开的信息窗口. 首先,需要在地图上添加一个marker,具体如下所示: $.ajax({async:fals ...

  2. c#退出窗口跳转_编写Qt多窗口程序

    导语 程序要实现的功能是:程序开始出现一个对话框,按下按钮后便能进入主窗口,如果直接关闭这个对话框,便不能进入主窗口,整个程序也将退出.当进入主窗口后,我们按下按钮,会弹出一个对话框,无论如何关闭这个 ...

  3. html 点击新建窗口,【单选题】在HTML中,若实现单击超链接时,弹出一个新的网页窗口,下列的()选项符合要求。 A. 节目 B. 节目 C. 节目 D. 节目...

    [单选题]在HTML中,若实现单击超链接时,弹出一个新的网页窗口,下列的()选项符合要求. A. 节目 B. 节目 C. 节目 D. 节目 更多相关问题 扩展不确定度为()Ω,取包含因子k=2.A.0 ...

  4. python 窗口最小化_有没有办法通过Python 3最小化Windows 7中的窗口?

    我正在运行一个内置Python解释器的程序.我希望该程序能够"全屏"或最小化. 这将在Windows 7上运行. 我想知道是否有办法在Python中执行此操作(以便我可以从我的程序 ...

  5. 【问题解决方案】谷歌浏览器如何打开“开发者工具”窗口

    [问题解决方案]谷歌浏览器如何打开"开发者工具"窗口 参考文章: (1)[问题解决方案]谷歌浏览器如何打开"开发者工具"窗口 (2)https://www.cn ...

  6. js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法

    js捕捉IE窗口失去焦点事件,判断离开页面刷新或关闭的方法 javascript如何捕捉IE窗口失去焦点事件 window.onblur = function(e) { //you code }; 弹 ...

  7. 计算机 窗口打开的方法,如何打开命令行窗口?两种实用的方法介绍

    Windows系统中常常会用到命令行窗口,那么我们该如何打开命令行窗口?接下来,小编为大家介绍两种实用的打开命令行窗口的技巧,再也不必担忧如何打开命令行窗口的烦恼了. 第一种打开方法 1.点击自己的电 ...

  8. c#在一个窗口中打开另一个窗口

    1.今天功能需要,打开新的窗口,这里简单记录下 2.实现机制,在主程序打开第一个窗口,在第一个窗口里面写入触发事件,打开另一个窗口,并隐藏当前窗口 3.实现代码段 创建两个窗口 分别为  setPar ...

  9. python槽怎么用_【Python成长之路】从零学GUI -- 多窗口跳转(信号与槽函数用法)...

    [写在前面] 自学python,不同于工作上的代码编程,主要是为了好玩或者满足自己的需求.因此,我一直想自己做些APP,未来可以给小朋友做做练习,比如让她学习算术.学习成语接龙之类的.总不能让她看这样 ...

最新文章

  1. NLP语义标注模型数据准备及实战
  2. jQuery判断当前元素显示状态并控制元素的显示与隐藏
  3. 一些http 响应码及含义
  4. performance metrics
  5. jaxb_使用JAXB时
  6. JS获取鼠标位置,兼容IE FF
  7. 从传统操作系统角度理解Hadoop YARN
  8. ModuleNotFoundError: No module named ‘_bz2‘(Python3.7安装某些包报错)
  9. 假如你心中有个莎乐美
  10. html 手机复制到剪贴板,移动端和pc端的复制到剪贴板功能
  11. 【Elasticsearch】官方Elasticsearch Java客户端的状态
  12. ROS2 和Ubuntu 版本对应关系
  13. 使用.png格式图片,制作.icns格式图片
  14. python的key函数_由 sort 中 key 的用法浅谈 python
  15. 配色工具Material Design
  16. 用 DiskGenius 解决移动硬盘变 RAW 问题
  17. WEB漏洞之:海洋CMS代码执行(CNVD-2020-22721)
  18. 结课作业:机械设计制造及其自动化文献综述
  19. 弥勒“甘丝蜜朵”旅游地产策划规划方案
  20. 一篇就懂的CMMI认证三级评估准备及其注意事项

热门文章

  1. SqlServer判断表是否存在
  2. 祝福遨游:傲游浏览器3月将入住欧盟Win7用户桌面
  3. BCH钱包Electron Cash探索新的众筹模式
  4. .NET Core微服务之路:不断更新中的目录 (v0.42)
  5. X86服务器虚拟化的资源划分和性能优化
  6. CSS0 -- 静态、自适应、流式、响应式
  7. Jsoup下载图片报错:UnsupportedMimeTypeException
  8. centos 服务器安全优化细则
  9. Requested bean is currently in creation: Is there an unresolvable circular reference?
  10. 转:android实时语音问题分析