首页 文章

最小化app到系统托盘

提问于
浏览
101

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

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

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

9 回答

  • 16

    this.WindowState = FormWindowState.Minimized;

  • 1

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

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

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

    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]";
    
  • 3

    ...并为您的右键单击通知菜单向表单添加上下文菜单并编辑它,并通过双击它们为每个上下文菜单设置鼠标点击事件,然后通过选择notifyicon属性中的ContextMenuStrip将其附加到notifyicon1 .

  • 12

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

  • 16

    这是我在我的应用程序中使用的方法,它相当简单和自我解释但我很乐意提供更多细节来回答您的意见 .

    public Form1()
        {
            InitializeComponent();
    
            // When window state changed, trigger state update.
            this.Resize += SetMinimizeState;
    
            // When tray icon clicked, trigger window state change.       
            systemTrayIcon.Click += ToggleMinimizeState;
        }      
    
        // Toggle state between Normal and Minimized.
        private void ToggleMinimizeState(object sender, EventArgs e)
        {    
            bool isMinimized = this.WindowState == FormWindowState.Minimized;
            this.WindowState = (isMinimized) ? FormWindowState.Normal : FormWindowState.Minimized;
        }
    
        // Show/Hide window and tray icon to match window state.
        private void SetMinimizeState(object sender, EventArgs e)
        {    
            bool isMinimized = this.WindowState == FormWindowState.Minimized;
    
            this.ShowInTaskbar = !isMinimized;           
            systemTrayIcon.Visible = isMinimized;
            if (isMinimized) systemTrayIcon.ShowBalloonTip(500, "Application", "Application minimized to tray.", ToolTipIcon.Info);
        }
    
  • 1

    单击系统托盘中的图像,您可以验证框架是否可见,然后您必须设置Visible = true或false

  • 67

    处理表单的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;
        }
    }
    
  • -2

    我会去的

    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;
    }
    
  • 139

    试试这个

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

相关问题