【问题标题】:How do I launch .net windows forms application with no visible windows?如何启动没有可见窗口的 .net windows 窗体应用程序?
【发布时间】:2010-06-05 00:37:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# .net winforms system-tray


    【解决方案1】:

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

    【讨论】:

    • 这就是我所需要的,虽然我在那个表单上使用了一个现在不起作用的计时器,所以我有一些应用程序重组要做。感谢您的帮助!
    【解决方案2】:

    如果您在启动应用程序时不需要主窗体,请here is a link 到一篇描述如何创建 NotifyIcon 的文章。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 调用表单类构造函数后,Application.Run 将覆盖所有可见性为 true。
      • 哇!在设计器属性中设置 WindowState=Minimized 和 ShowInTaskbar=false 有效!如此简单,如此有效!
      【解决方案4】:

      可能有点老套,但您可以创建一个无边框表单 (FormBorderStyle.None) 并将其设置为 TransparencyKeyBackColor,禁用 ShowInTaskbar,然后将该表单提供给 Application.Run()。瞧。 :)

      【讨论】:

        【解决方案5】:

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

        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
            }
         }
        

        【讨论】:

          猜你喜欢
          • 2011-07-01
          • 2020-01-24
          • 1970-01-01
          • 1970-01-01
          • 2017-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多