[英]How do I launch .net windows forms application with no visible windows?
我有一个.net Windows窗体应用程序,需要直接打开通知图标(系统托盘),没有可见的窗口。 我意识到我可以在onshown事件或类似事件中执行此操作。 但如果我这样做,我会得到一个窗口的闪光。 我怎么能避免那个闪光灯? 我已经尝试修改我的Program.cs
文件,如下所示:
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
MainForm frm = new MainForm();
frm.Visible = false;
Application.Run(frm);
但是这不起作用,因为Application.Run()
使表单可见。 我很确定我会错过一个简单的答案。 任何帮助是极大的赞赏。
Application.Run()
有一个重载,它不接受任何参数,因此在应用程序启动时不会立即显示表单。 当然,您必须管理导致应用程序自行终止的原因,因为它没有初始或“主要”形式供其监控。 所以例如它是你的通知图标,我相信你能够处理它。
如果您在启动应用程序时不需要主表单,则可以在此处链接到描述如何仅创建NotifyIcon的文章。
您可以尝试将frm上的WindowState设置为Minimized,同时将ShowInTaskbar设置为false。 另外,我不是专家,但我认为你应该处理MainForm构造函数中的可见性逻辑。
这是我所拥有的表单的初始化方法的代码片段。 应用程序在托盘中运行,当用户双击通知图标时,窗口会显示。 我有处理调整大小等的方法,确保只能通过菜单选项关闭表单。
public MainForm()
{
...code
Resize += MainForm_Resize;
notifyIcon.DoubleClick += NotifyIconDoubleClick;
WindowState = FormWindowState.Minimized;
Hide();
}
private void MainForm_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == WindowState)
Hide();
}
private void NotifyIconDoubleClick(object sender, EventArgs e)
{
Show();
try
{
WindowState = FormWindowState.Normal;
...more code for other stuff
}catch(yadda yadda)
...code
}
}
也许有点hackish,但你可以创建一个无边框Form( FormBorderStyle.None
)并将它的TransparencyKey
设置为它的BackColor
,禁用ShowInTaskbar
,然后将该表单提供给Application.Run()。 瞧。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.