WinForm程序启动时不显示主窗体的实现方法
作者在文章中已经说得很清楚,将Form的Visible属性设置为false是不行的,因为在Application.Run方法的内部,主窗体的Visible属性将被强制设置为true。
此外,有朋友在回复中提供了“不启动任何窗体”的办法,即:
{
Application.Run();
}
然后在NotifyIcon的Click事件中显示MainForm就可以了。
可以参考他的文章(http://ly4cn.cnblogs.com/archive/2006/03/16/351205.html)。
这个方法的确是解决了这个问题;但是由于切断了主窗体和Application之间的联系,因此必须使用Application.Exit来关闭程序。这样做仍然有些不自然,且有一些安全隐患;那么到底有没有更好的方法呢?
一个方法就是使用ApplicationContext。
ApplicationContext实质上就是一个Application与主窗体之间的连接器,掌管着二者之间的互动关系。
其中最主要的,就是负责在主窗体关闭时结束线程。既然如此,我们只要根据需要自定义一个ApplicationContext就可以了:
{
privateForm mainFormInternal;
// 构造函数,主窗体被存储在mainFormInternal
publicHideOnStartupApplicationContext(Form mainForm)
{
this.mainFormInternal =mainForm;
this.mainFormInternal.Closed += newEventHandler(mainFormInternal_Closed);
}
// 当主窗体被关闭时,退出应用程序
void mainFormInternal_Closed(objectsender, EventArgs e)
{
Application.Exit();
}
}
随后,我们只需要在Main当中像下面这样调用既可:
{
//...
HideOnStartupApplicationContext context = new HideOnStartupApplicationContext(newMainForm());
Application.Run(context);
}
这样,MainForm根本不用去考虑窗口与应用程序的关系,安安心心做它的“主窗口”就可以了。
此外,既然明白了ApplicationContext掌管着窗口结束与程序结束的关系,我们就可以用它来做出一些有趣的东西:
比如MSDN上就给出了一个“双主窗口”——同时显示2个Form,关闭其中任何一个都不会导致程序结束,只有全部关闭了才会结束程序。有兴趣的朋友可以参看MSDN关于ApplicationContext的资料,那里给出了详细的说明和范例代码。
再如,要设计一个“向导(Wizard)”类的程序,使用ApplicationContext也是最佳选择——它可以轻松控制Form到Form的流程,以及Form的启动与关闭,使得你的每个Form更加模块化,减少Form之间的依赖。
WinForm程序启动时不显示主窗体的实现方法相关推荐
- C++ Builder 启动时不显示主窗体
在网络上看到不少说法,但标准的做法应该是这样的. 首先,设置主窗体Visible属性为false; 然后,在Application->Run之前,设置Application->ShowMa ...
- WinForm 之 程序启动不显示主窗体
在 WinForm 程序启动时,不显示主窗体的实现方法主要有以下5种,第五种最简单,而且效果也不错,第四种方法也值得推荐. 实例代码如下: //隐藏窗体的方法1/5:不指定任何窗体为主窗体 //注意: ...
- 2.实验室打卡精灵2.0-单实例化、开机启动、托盘操作、程序启动时隐藏主窗口
老规矩,上一张图片 最近对实验室打卡精灵做了一些优化,基本上达到了最初设想的功能. 现在的功能包括: 1.自定义早上.中午.下午.晚上的打卡时间 2.软件单实例化,即如果已经运行了一次再次运行会弹出& ...
- 程序启动时,vc2015设置哪个窗体先打开,优先启动,设置方法
程序启动时,vc2015设置哪个窗体先打开,设置方法 工程名对应的APP文件中 InitInstance中 //Caccess_mdb_operationDlg dlg; //可以设置这里,首先启动 ...
- 把图形写入linux内核,如何在linux内核启动时添加显示图片
内核版本为2.6.30.4 为了实现了在linux内核启动时不仅仅是只显示一个静态的全屏logo, 而是显示能够表示内核正在启动的进度条,因此需要能够在启动过程中直接操纵framebuffer的功能. ...
- linux 查看进程变量,Linux下查看进程(程序)启动时的环境变量
Linux下查看进程(程序)启动时的环境变量 Linux的pargs ==================================== 今天又遇到一个老问题: 同事遇到了sqlplus &qu ...
- Winform MessageBox.Show时居中到主页面
参考 (3条消息) .Net下Winform程序让MessageBox.Show显示在父窗体中间_aspnet2002web的博客-CSDN博客b 背景 最近winform项目不需要使用全屏显示了,还 ...
- linux c 启动程序吗,Linux下C程序启动时的系统调用
写程序跟踪发现,在Linux i386中,一个程序体完全为空的C语言程序启动时要进行近100个系统调用,如下所示. [ 1]syscall: 11 //execve [ 2]syscall: 45 / ...
- VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题) 参考文章: (1)VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题) (2)https://www.cnblogs.com/ ...
最新文章
- 编程软件python怎样开始学-编程零基础应当如何开始学习 Python?
- 设计模式之委派模式及适配器模式
- Linux TCP 连接数修改
- python离群点检测_如何从熊猫DataFrame中检测峰点(离群值)
- 从开源视角分析,搞定边缘计算云原生方案选型
- 国内厂商 Onyx 违反 GPL 协议,中国开源何去何从?
- Aruba发布业界首款服务智能边缘的云原生平台Aruba ESP
- Linux环境_源码安装LibreOffice实现文件在线预览doc,doxc,xls,xlsx,ppt,pptx 文件
- CodeIgniter辅助函数
- 编译原理pl/0 c语言版 pl0.h文件
- 我的docker随笔9:docker在centos上的安装
- Siebel Admin: How to find the Component that associated with Application
- 机构借贷平台 Maple 将上线以太坊主网并开启流动性挖矿
- PHP PDF转图片:设置图像的色彩空间 RGBCMYK互转
- chrome谷歌浏览器 离线安装包下载64位
- 腾讯电子签小程序就能开收据了
- fqa什么意思_FQA是啥意思
- 设计模式——访问者模式
- 京东云主机 mysql_京东云所有地域正式支持 MySQL 8.0!
- 天梯赛L1(1-80)
热门文章
- cookie知识总结
- postman 字符串中有冒号_【接口测试】Postman入门09 Postman获取HTTP请求
- 多线程跑调度_java多线程中的调度策略
- SSL/TLS 工具 OpenSSL
- Java Portlets 介绍
- 保益悦听怎么开盲人模式_夏天空调开26度,宝宝最舒适?错!夏季空调怎么开,你来听我说...
- 使用计算机控制台方法,故障控制台使用方法
- linux恢复fat文件系统,使用‘fsck’修复Linux中文件系统错误的方法
- CodeForces - 589D
- 一般判五年几年能出来_A股十年不涨的“元凶”被揪了出来,指数不该被冤枉...