如何在没有可见窗口的情况下启动.net 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()
的重载不包含任何参数,因此在应用程序启动时不会立即显示表单。 当然,你必须管理导致应用程序自行终止的原因,因为它没有初始或“主要”forms供它监控。 所以例如它是你的通知图标,我相信你能够处理它。
如果您在启动应用程序时不需要主表单,则可以在此处链接到描述如何仅创建NotifyIcon的文章。
您可以尝试将frm上的WindowState设置为Minimized,同时将ShowInTaskbar设置为false。 另外,我不是专家,但我认为你应该处理MainForm构造函数中的可见性逻辑。
也许有点hackish,但你可以创建一个无边框Form( FormBorderStyle.None
)并将它的TransparencyKey
设置为它的BackColor
,禁用ShowInTaskbar
,然后将该表单提供给Application.Run()。 瞧。 🙂
这是我所拥有的表单的初始化方法的代码片段。 应用程序在托盘中运行,当用户双击通知图标时,窗口会显示。 我有处理resize等的方法,确保只能通过菜单选项关闭表单。
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 } }