【问题标题】:Problems with Minimizing to Tray最小化到托盘的问题
【发布时间】:2013-01-07 21:21:23
【问题描述】:

在我的 Windows 窗体应用程序 (C#) 中,我有这样的代码:

            private void frm_main_Resize(object sender, EventArgs e)
    {
        if ((this.WindowState == FormWindowState.Minimized) && (checkBox1.Checked))
        {
            this.ShowInTaskbar = false;

            notifyIcon1.Visible = true;
        }
    }

    private void notifyIcon1_DoubleClick(object Sender, EventArgs e)
    {
        if (this.WindowState == FormWindowState.Minimized)
        {
            this.WindowState = FormWindowState.Normal;
        }
        else
        {
            this.WindowState = FormWindowState.Minimized;
        }

        this.Activate();
    }

我的 publick 表单有双击处理程序notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);

当最小化的应用程序仍然出现在任务栏中,如何更改?我希望在最小化状态下它只会在系统托盘中。为什么这个 coce deos 不起作用?

【问题讨论】:

  • 您是否真的将 notifyIcon1_MouseDoubleClick 处理程序连接到 notifyIcon1 对象?
  • 是的,刚刚做到了,现在它可以工作了,但仍然知道如何从任务栏中删除应用程序。
  • 你验证过frm_main_Resize执行时this.WindowState的值实际上是Minimized吗?
  • 不是真的,我该怎么做?
  • 您可以在 frm_main_Resize 方法中设置断点并调试应用程序。

标签: c# winforms icons system-tray trayicon


【解决方案1】:

我在我的项目中使用了类似的代码,你不需要隐藏和显示:

private void frm_main_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized && checkBox1.Checked)
    {
        this.ShowInTaskbar = false;
        notifyIcon1.Visible = true;
    }
}

同时尝试处理MouseClick事件而不是DoubleClick

  private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
  {
     if (e.Button == System.Windows.Forms.MouseButtons.Left && e.Clicks == 2)
     {
        this.WindowState = FormWindowState.Normal;
        this.ShowInTaskbar = true;
        notifyIcon1.Visible = false;
        this.Activate();
     }
  }

【讨论】:

  • 对于从托盘显示应用程序最好使用事件MouserDoubleClick。该事件显示应用程序使用 Skype、Microsoft Security Essentials、Origin 和许多其他程序等程序。
  • @Epsil0neR 你怎么知道他们在用什么?它们不是开源的。点击两次并不意味着他们正在使用 DoubleClick 事件
  • 这没有意义。许多程序无法通过单击从托盘中显示,因此在这种情况下,他应该使用事件MouseDoubleClick
  • @Epsil0neR 请更好地查看我的代码,我正在处理我的函数中的双击。如果事情如此明显,那么 OP 的代码就会起作用。顺便提一句。有 2 个事件,DoubleClick 和 MouseDoubleClick。你会用哪个?
  • 我尝试了MouseClick 事件,我看到 e.Cliks alvays 等于 1,我什至无法使用 mouseclicker 应用程序获得 e.clicks > 1,因此您的代码将无法正常工作.我在 WinForm 中使用了带有 MouseClick 事件的 2 个标签,代码在这里:pastebin.com/QcjSAxaC
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 2017-11-15
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多