最小化app到系统托盘

Wan*_*tIt 109 c# windows winforms

我有一个由C#和Visual Studio 2010提供支持的Windows窗体应用程序.

如何将我的应用程序最小化到系统托盘(而不是任务栏),然后在系统托盘中双击时将其恢复?任何的想法?另外,如何在系统托盘中的图标中创建一些菜单,当我右键单击它时,它会显示一个菜单,如登录,断开连接,连接等等.此外,是否有任何方法可以显示从系统托盘弹出气球?

PS:我已经添加了一个notifyIcon,但我不知道如何使用它.

CD.*_*D.. 146

处理表单的Resize事件.在此处理程序中,您将覆盖Resize事件的基本功能,以使表单最小化到系统托盘而不是任务栏.这可以通过在表单的Resize事件处理程序中执行以下操作来完成:检查表单的WindowState属性是否设置为FormWindowState.Minimized.如果是,请隐藏表单,启用NotifyIcon对象,并显示显示某些信息的气球提示.一旦WindowState变为FormWindowState.Normal,通过将其Visible属性设置为false来禁用NotifyIcon对象.现在,您希望在双击任务栏中的NotifyIcon对象时再次出现该窗口.为此,处理NotifyIcon的MouseDoubleClick事件.在这里,您使用Show()方法显示表单.

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

    else if (FormWindowState.Normal == this.WindowState)
    {
       mynotifyicon.Visible = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • http://stackoverflow.com/questions/3025923/disabling-minimize-maximize-on-winform (8认同)
  • http://stackoverflow.com/questions/683330/how-to-make-a-window-always-stay-on-top-in-net (7认同)
  • 您可以更改Form.FormBorderStyle属性http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formborderstyle.aspx (4认同)

Ben*_*pka 69

我发现这可以完成整个解决方案.上面的答案无法从任务栏中删除窗口.

private void ImportStatusForm_Resize(object sender, EventArgs e)
{
    if (this.WindowState == FormWindowState.Minimized)
    {
        notifyIcon.Visible = true;
        notifyIcon.ShowBalloonTip(3000);
        this.ShowInTaskbar = false;
    }
}

private void notifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
    this.WindowState = FormWindowState.Normal;
    this.ShowInTaskbar = true;
    notifyIcon.Visible = false;
}
Run Code Online (Sandbox Code Playgroud)

最好使用表单设计器设置通知图标控件的以下属性.

this.notifyIcon.BalloonTipIcon = System.Windows.Forms.ToolTipIcon.Info; //Shows the info icon so the user doesn't think there is an error.
this.notifyIcon.BalloonTipText = "[Balloon Text when Minimized]";
this.notifyIcon.BalloonTipTitle = "[Balloon Title when Minimized]";
this.notifyIcon.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon.Icon"))); //The tray icon to use
this.notifyIcon.Text = "[Message shown when hovering over tray icon]";
Run Code Online (Sandbox Code Playgroud)

  • 你在`this.WindowState = FormWindowState.Normal;`之前缺少`this.Show();` (6认同)

Ale*_*Río 17

我会去的

private void Form1_Resize(object sender, EventArgs e)
{
     if (FormWindowState.Minimized == this.WindowState)
     {
          notifyIcon1.Visible = true;
          notifyIcon1.ShowBalloonTip(500);
          this.Hide();    
     }
     else if (FormWindowState.Normal == this.WindowState)
     {
          notifyIcon1.Visible = false;
     }
}

private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
     this.Show();
     this.WindowState = FormWindowState.Normal;
}
Run Code Online (Sandbox Code Playgroud)


eww*_*ink 16

不要忘记将图标文件添加到您的notifyIcon,否则它将不会出现在托盘中.


Tan*_*ete 12

试试这个

 private void Form1_Load(object sender, EventArgs e)
    {
        notifyIcon1.BalloonTipText = "Application Minimized.";
        notifyIcon1.BalloonTipTitle = "test";
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        if (WindowState == FormWindowState.Minimized)
        {
            ShowInTaskbar = false;
            notifyIcon1.Visible = true;
            notifyIcon1.ShowBalloonTip(1000);
        }
    }

    private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        ShowInTaskbar = true;
        notifyIcon1.Visible = false;
        WindowState = FormWindowState.Normal;
    }
Run Code Online (Sandbox Code Playgroud)

  • 如果您只是从任务栏隐藏而不是调用“this.Hide()”,则在执行 Alt-Tab 时窗口仍然会出现。 (2认同)