最小化应用程序到系统托盘的麻烦

时间:2017-06-13 16:37:39

标签: c# wpf system-tray

(WPF C#) 我想最小化应用程序到系统托盘,但在任务栏中没有图标: enter image description here 所以我设置:

this.ShowInTaskbar = false;

然后不良图标消失了,但桌面上出现了新栏!

enter image description here

有人想知道如何在最小化后解决这个问题吗?

这是我代码的重要部分:

private void stateChangedEvent(object sender, EventArgs e)
        {            
            if (WindowState.Minimized == WindowState)
            {
                this.ShowInTaskbar = false;
                var iconHandle = Properties.Resources.iconPaw.GetHicon();
                notifyIcon.Icon = System.Drawing.Icon.FromHandle(iconHandle);
                notifyIcon.Click += new EventHandler(this.WindowsStateToNormal);
                notifyIcon.Visible = true;
                notifyIcon.BalloonTipText = "Radek app";
                notifyIcon.BalloonTipTitle = "Welcome Message";
                notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info;
                notifyIcon.ShowBalloonTip(3000);
            }
        }

        private void WindowsStateToNormal(object Sender, EventArgs e)
        {
            this.WindowState = WindowState.Normal;
            notifyIcon.Visible = false;               
        }

3 个答案:

答案 0 :(得分:1)

尝试致电

this.Hide()

当表单最小化时,最好在Form.Resize事件处理程序中:

private void frmMain_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
       this.Hide();
}

在某些时候你必须致电

this.Show()

例如,在DoubleClick的{​​{1}}处理程序中。

答案 1 :(得分:1)

最小化到托盘是一个黑客攻击。要完成它,你需要:

  • 捕获最小化事件并取消它以防止实际最小化
  • 使用this.Hide()
  • 隐藏您的应用程序窗口
  • 在任务栏图标上侦听点击事件,并在点击时取消隐藏应用程序窗口

答案 2 :(得分:0)

您的主窗口及其通知图标在激活方面没有关系。

您通常不希望正在运行的应用程序消失,也无法再次激活它。因此,Windows为应用程序的用户提供了通过单击其任务栏图标(您要隐藏)或通过单击其边框(您也不想显示)来重新激活窗口的选项。

为避免这种情况,只需在主窗口最小化时隐藏它,并在(双击)通知图标时取消隐藏它。

minimize app to system trayHow do I minimize a WinForms application to the notification area?Minimize to trayMinimizing a system windows form in tray in C# without seeing it hanging where taskbar等代码中的字数较少,代码较多。