4

我有一个 .net windows 窗体应用程序,需要直接打开通知图标(系统托盘),没有可见窗口。我意识到我可以在 onshown 事件或类似事件中做到这一点。但如果我这样做,我会看到一个闪光的窗口。我怎样才能避免这种闪光?我尝试将我的Program.cs文件修改为如下所示:

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);

MainForm frm = new MainForm();
frm.Visible = false;
Application.Run(frm);

但是,这也不起作用,因为Application.Run()使表单可见。我很确定我缺少一个简单的答案。任何帮助是极大的赞赏。

4

5 回答 5

4

没有参数的重载Application.Run(),因此不会在应用程序启动时立即显示表单。当然,您必须自己管理导致应用程序终止的原因,因为它没有初始或“主要”表单可供监控。因此,例如,它将是您的通知图标,我相信您将能够处理。

于 2010-06-05T00:54:41.953 回答
3

如果您在启动应用程序时不需要主窗体,这里是一篇文章的链接,该文章描述了如何创建一个 NotifyIcon。

于 2010-06-05T00:51:01.603 回答
1

您可以尝试将 frm 上的 WindowState 设置为最小化,同时将 ShowInTaskbar 设置为 false。另外,我不是专家,但我认为您应该在 MainForm 构造函数中处理可见性逻辑。

于 2010-06-05T00:47:33.497 回答
0

这是我拥有的表单的初始化方法的代码片段,它正是这样做的。该应用程序在托盘中运行,当用户双击通知图标时会显示该窗口。我有处理调整大小等的方法,可确保仅通过菜单选项关闭表单。

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
    }
 }
于 2010-06-05T00:57:44.660 回答
0

可能有点骇人听闻,但您可以创建一个无边界表单 ( FormBorderStyle.None) 并将其设置TransparencyKey为 it's BackColor、 disable ShowInTaskbar,然后将该表单提供给 Application.Run()。瞧。:)

于 2010-06-05T01:09:05.367 回答