天天看点

winform 关闭时隐藏到托盘

需求: 点击主窗口关闭到托盘

1. 拖动一个notifyIcon 控件到窗口

2. 再动一个contextMenuStrip 到主窗口,做托盘里图标右键菜单使用,

winform 关闭时隐藏到托盘

3.菜单里两个选项:

显示主界面和退出

5. 主页面的FormClosing 事件,重写后加 显示任务栏图标且显示托盘图标。
 private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
         {
             try
             {
                 //this.WindowState = FormWindowState.Minimized;
                 this.Hide();
                 //隐藏任务栏区图标
                 this.ShowInTaskbar = false;
                 //图标显示在托盘区
                 notifyIcon1.Visible = true;
         
                 e.Cancel = true;
             }
             catch (Exception ex)
             {
                 Console.WriteLine(ex.ToString());
             }        }
6. 最后一步:托盘图标事件:
  #region 托盘右键图标
         /// <summary>
         /// 双击托盘图标显示主界面
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
         {
            //还原窗体显示    
                 this.WindowState = FormWindowState.Normal;
                 //激活窗体并给予它焦点
                 this.Activate();
                 this.Show();
                 //任务栏区显示图标
                 this.ShowInTaskbar = true;
                 //托盘区图标隐藏
                 notifyIcon1.Visible = true;
         }
         /// <summary>
         /// 单击菜单显示主界面
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void 显示主界面ToolStripMenuItem_Click(object sender, EventArgs e)
         {
              WindowState = FormWindowState.Normal;
             this.Show();
         }        /// <summary>
         /// 右键退出
         /// </summary>
         /// <param name="sender"></param>
         /// <param name="e"></param>
         private void 退出ToolStripMenuItem_Click_1(object sender, EventArgs e)
         {
             if (MessageBox.Show("是否确认退出程序?", "退出", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
             {
                 System.Environment.Exit(0);
                // if (myThread != null)
                 //{
                  //   myThread.Abort();
                 //}
                 // 关闭所有的线程
                 this.Dispose();
                 this.Close();
             }
         }
         #endregion