C# 实现程序托盘功能

 

例子代码

链接:https://pan.baidu.com/s/1fzMFawFsYi-CjMGzXF-9sA
提取码:3acn

 

新建一个Form1窗体,监听窗体大小变化事件、窗体关闭事件

复制代码
     /// <summary>
        /// 窗体大小监听
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Form1_Resize(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 Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (!formClose)
            {
                //不是通过菜单关闭程序
                WindowState = FormWindowState.Minimized;
                e.Cancel = true;
            }
            else
            {
                timer1.Stop();//关闭定时器
            }
        }
复制代码

 

添加控件:

notifyIcon(通过notifyIcon1.Visible = false/true控制托盘显示

复制代码
     /// <summary>
        /// 鼠标点击托盘图标
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                if (WindowState == FormWindowState.Minimized)
                {
                    WindowState = FormWindowState.Normal;
                    this.Activate();//激活窗口
                    this.ShowInTaskbar = true;//托盘中显示
                    notifyIcon1.Visible = false;
                }
            }
        }
复制代码

 

contextMenuStrip(托盘右键菜单)

复制代码
     #region 菜单点击事件

        private void 提示信息ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            notifyIcon1.ShowBalloonTip(5000, "提示", "这是提示效果!", ToolTipIcon.Info);
        }

        private void 开始闪烁ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            timer1.Start();
        }

        private void 取消闪烁ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            timer1.Stop();
        }

        private void 退出程序ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            formClose = true;//菜单关闭程序
            this.Close();
        }
        #endregion
复制代码

 

timer(控制托盘图片闪烁,做成消息提醒功能,需要增加两张.ico图到 Properties.Resources

复制代码
     /// <summary>
        /// 闪烁图表定时器
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timer1_Tick(object sender, EventArgs e)
        {
            notifyIcon1.Icon = shan
                ? Properties.Resources.程序
                : Properties.Resources.托盘;
            shan = !shan;
        }
复制代码

 

 

 

 

 

 

posted @   小杨观世界  阅读(653)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示