WinForm程序启动时不显示主窗体的实现方法
2012-02-07 18:40
597 查看
将Form的Visible属性设置为false是不行的,因为在Application.Run方法的内部,主窗体的Visible属性将被强制设置为true。
此外,有朋友在回复中提供了“不启动任何窗体”的办法,即:
using (new MainForm())
{
Application.Run();
}
然后在NotifyIcon的Click事件中显示MainForm就可以了。
可以参考他的文章(http://ly4cn.cnblogs.com/archive/2006/03/16/351205.html)。
这个方法的确是解决了这个问题;但是由于切断了主窗体和Application之间的联系,因此必须使用Application.Exit来关闭程序。这样做仍然有些不自然,且有一些安全隐患;那么到底有没有更好的方法呢?
一个方法就是使用ApplicationContext。
ApplicationContext实质上就是一个Application与主窗体之间的连接器,掌管着二者之间的互动关系。
其中最主要的,就是负责在主窗体关闭时结束线程。既然如此,我们只要根据需要自定义一个ApplicationContext就可以了:
internal class HideOnStartupApplicationContext : ApplicationContext
{
private Form mainFormInternal;
// 构造函数,主窗体被存储在mainFormInternal
public HideOnStartupApplicationContext(Form mainForm)
{
this.mainFormInternal = mainForm;
this.mainFormInternal.Closed += new EventHandler(mainFormInternal_Closed);
}
// 当主窗体被关闭时,退出应用程序
void mainFormInternal_Closed(object sender, EventArgs e)
{
Application.Exit();
}
}
随后,我们只需要在Main当中像下面这样调用既可:
static void Main()
{
//...
HideOnStartupApplicationContext context = new HideOnStartupApplicationContext(new MainForm());
Application.Run(context);
}
这样,MainForm根本不用去考虑窗口与应用程序的关系,安安心心做它的“主窗口”就可以了。
此外,既然明白了ApplicationContext掌管着窗口结束与程序结束的关系,我们就可以用它来做出一些有趣的东西:
比如MSDN上就给出了一个“双主窗口”——同时显示2个Form,关闭其中任何一个都不会导致程序结束,只有全部关闭了才会结束程序。有兴趣的朋友可以参看MSDN关于ApplicationContext的资料,那里给出了详细的说明和范例代码。
再如,要设计一个“向导(Wizard)”类的程序,使用ApplicationContext也是最佳选择——它可以轻松控制Form到Form的流程,以及Form的启动与关闭,使得你的每个Form更加模块化,减少Form之间的依赖。
此外,有朋友在回复中提供了“不启动任何窗体”的办法,即:
using (new MainForm())
{
Application.Run();
}
然后在NotifyIcon的Click事件中显示MainForm就可以了。
可以参考他的文章(http://ly4cn.cnblogs.com/archive/2006/03/16/351205.html)。
这个方法的确是解决了这个问题;但是由于切断了主窗体和Application之间的联系,因此必须使用Application.Exit来关闭程序。这样做仍然有些不自然,且有一些安全隐患;那么到底有没有更好的方法呢?
一个方法就是使用ApplicationContext。
ApplicationContext实质上就是一个Application与主窗体之间的连接器,掌管着二者之间的互动关系。
其中最主要的,就是负责在主窗体关闭时结束线程。既然如此,我们只要根据需要自定义一个ApplicationContext就可以了:
internal class HideOnStartupApplicationContext : ApplicationContext
{
private Form mainFormInternal;
// 构造函数,主窗体被存储在mainFormInternal
public HideOnStartupApplicationContext(Form mainForm)
{
this.mainFormInternal = mainForm;
this.mainFormInternal.Closed += new EventHandler(mainFormInternal_Closed);
}
// 当主窗体被关闭时,退出应用程序
void mainFormInternal_Closed(object sender, EventArgs e)
{
Application.Exit();
}
}
随后,我们只需要在Main当中像下面这样调用既可:
static void Main()
{
//...
HideOnStartupApplicationContext context = new HideOnStartupApplicationContext(new MainForm());
Application.Run(context);
}
这样,MainForm根本不用去考虑窗口与应用程序的关系,安安心心做它的“主窗口”就可以了。
此外,既然明白了ApplicationContext掌管着窗口结束与程序结束的关系,我们就可以用它来做出一些有趣的东西:
比如MSDN上就给出了一个“双主窗口”——同时显示2个Form,关闭其中任何一个都不会导致程序结束,只有全部关闭了才会结束程序。有兴趣的朋友可以参看MSDN关于ApplicationContext的资料,那里给出了详细的说明和范例代码。
再如,要设计一个“向导(Wizard)”类的程序,使用ApplicationContext也是最佳选择——它可以轻松控制Form到Form的流程,以及Form的启动与关闭,使得你的每个Form更加模块化,减少Form之间的依赖。
相关文章推荐
- C# WinForm程序启动时不显示主窗体的实现方法
- WinForm程序启动时不显示主窗体的实现方法
- WinForm程序启动时不显示主窗体的实现方法
- WinForm程序启动时不显示主窗体的实现方法(转)
- 转:C#里WinForm程序启动时不显示主窗体的方法
- WinForm程序启动时不显示主窗体的5种方法
- C#Winform实现程序关闭隐藏窗体,二次程序启动时显示
- WinForm程序启动时不显示主窗体
- WinForm 之 程序启动不显示主窗体
- 从web页面启动winform程序的实现方法
- 启动程序时,不显示窗体,只显示托盘图标的方法
- WinForm程序启动时不显示主窗体
- WinForm程序启动时不显示主窗体
- 在Winform程序运行时启动Cmd命令行显示日志信息的设置方法
- WinForm 程序启动时不显示主窗体
- Winform程序实现多显示屏、多屏幕显示的2种方法
- C#程序实现软件开机自动启动的两种常用方法
- 解决winform中mdi子窗体加载时显示最大化最小化按钮的方法
- 点击快捷方式,不又一次启动程序而是让程序窗体又一次显示的解决方式
- [导入]在C#中启动另一个程序的实现方法[转载]