WinForm 之 窗口最小化到托盘及右键图标显示菜单

时间:2021-10-15 05:32:54

  Form最小化是指整个Form都缩小到任务栏上,但是窗体以Form的标题栏形式显示在任务栏上, 若是想让Form以Icon的形式显示在任务栏右下角,则需要给Form添加一个NotifyIcon控件。

一、添加NotifyIcon控件

  1 如下图为窗体添加一个 NotifyIcon 控件,并指定 Icon 和 Text 属性,如下图:

  

  2 在需要窗体最小化到托盘的处理代码中,添加如下代码:

if(this.WindowState==FormWindowState.Normal&&this.Visible==true) { this.notifyIcon1.Visible=true;//在通知区显示Form的Icon this.WindowState=FormWindowState.Minimized; this.Visible=false; this.ShowInTaskbar=false;//使Form不在任务栏上显示 }

  

  3 可以为 添加NotifyIcon控件指定双击事件,双击还原,代码如下:

/// <summary>         /// 添加双击托盘图标事件(双击显示窗口)         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)         {             if (WindowState == FormWindowState.Minimized)             {                 //还原窗体显示                     WindowState = FormWindowState.Normal;                 //激活窗体并给予它焦点                 this.Activate();                 //任务栏区显示图标                 this.ShowInTaskbar = true;                 //托盘区图标隐藏                 notifyIcon1.Visible = false;             }         }

  4 关闭窗体询问是否直接退出或者最小化到托盘

/// <summary>         /// 判断是否最小化,然后显示托盘         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void F_Main_SizeChanged(object sender, EventArgs e)         {             //判断是否选择的是最小化按钮             if (WindowState == FormWindowState.Minimized)             {                 //隐藏任务栏区图标                 this.ShowInTaskbar = false;                 //图标显示在托盘区                 notifyIcon1.Visible = true;             }         }         /// <summary>         /// 确认是否退出         /// </summary>         /// <param name="sender"></param>         /// <param name="e"></param>         private void F_Main_FormClosing(object sender, FormClosingEventArgs e)         {             if (MessageBox.Show("是否确认退出程序?""退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)             {                 // 关闭所有的线程                 this.Dispose();                 this.Close();             }             else             {                 e.Cancel true;             }          }

二、添加 ContextMenuStrip 控件

  1 在窗体添加一个 ContextMenuStrip 控件,然后添加控件菜单项,,最后绑定给 NotifyIcon 控件即可,如下:

  

  2 绑定菜单给 NotifyIcon 控件,如下图:

  

  3 为 ContextMenuStrip 控件的菜单项指定单击事件,如下: