ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C# winform托盘功能实现

2022-06-17 11:03:51  阅读:173  来源: 互联网

标签:窗口 C# void EventArgs 托盘 FormWindowState contextMenuStrip winform


[C#]winform窗口托盘

 

[C#]winform窗口托盘
    winform托盘的使用主要用到了两个控件notifyIcon和contextMenuStrip
    (一)notifyIcon的使用
    1)先在工具箱中拖到主窗体中,直接在属性icon中选择一个ICO图标作为托盘图标,并把主窗口的属性ShowInTaskbar是否出现在任务栏中设置为假
    2)添加以下事件和语句
        private void Form1_SizeChanged(object sender, EventArgs e)
        {//窗口尺寸改变事件:即点最小化时(最好窗口是固定大小)
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.Hide();//隐藏主窗口
                this.notifyIcon1.Visible = true;//托盘为真
            }
        }
        //双击托盘,窗口恢复正常
        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
        }
    3)这里涉及到如果窗口有关闭按钮(最好是自己做关闭按钮),把关闭按钮改为最小化
     protected override void WndProc(ref   Message m) 
 {//重装API中的关闭 
      const int WM_SYSCOMMAND = 0x0112; 
      const int SC_CLOSE = 0xF060; 
      if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE) 
       {//捕捉关闭窗体消息    
          this.WindowState = FormWindowState.Minimized; 
          return; 
       } 
      base.WndProc(ref   m); 
 }
    如果是自己做的关闭按钮,直接用第2)步的方法即可.

    (二)为了让托盘图标有右键菜单功能,需要添加contextMenuStrip
    1)从工具箱中拖contextMenuStrip控件到主窗体
    2)为contextMenuStrip设置菜单项
    3)为notifyIcon属性中关联contextMenuStrip
    4)假设双击托盘或托盘菜单中"显示主窗口":
        //双击托盘,窗口恢复正常
        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
        }
        //菜单:显示主窗口
        private void 主窗口_Click(object sender, EventArgs e)
        {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
        }
        //菜单:退出功能
        private void 退出_Click(object sender, EventArgs e)
        {
            this.Close();
        }
另:如果想加一个关闭窗口时提示:确定退出?"是"则退出,"否"则最小化,并提供一个checkbox记住以后都按相同的操作,还会有一点麻烦,下次再研究.

            if (MessageBox.Show("确定退出?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes)
            {
                Application.Exit();
            }

标签:窗口,C#,void,EventArgs,托盘,FormWindowState,contextMenuStrip,winform
来源: https://www.cnblogs.com/CS-ComputerScience/p/16384983.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有