news 2026/8/29 10:11:13

【WinForm】使用C# WinForm实现带有托盘图标功能的应用程序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【WinForm】使用C# WinForm实现带有托盘图标功能的应用程序

文章目录

      • 前言
        • 一、项目设置
        • 二、设计界面
        • 三、代码实现
        • 四、功能说明
        • 五、总结

前言

在开发Windows应用程序时,有时我们需要程序在后台运行时隐藏主窗口,并通过系统托盘图标进行交互。本文将介绍如何使用C# Windows Forms来实现一个带有托盘图标功能的应用程序,该程序可以通过托盘图标进行打开和退出操作。

一、项目设置

首先,创建一个新的Windows Forms项目。在默认生成的主窗体代码基础上,我们将添加托盘图标及相关功能。

二、设计界面
  1. 主窗体设计

    • 在主窗体上放置一个NotifyIcon控件,命名为notifyIcon1。设置其Text属性(鼠标悬停在图标上时显示的提示信息),并指定一个图标文件。
    • 添加一个ContextMenuStrip控件,命名为contextMenuStrip1。在其中添加两个菜单项:“打开程序”和“退出程序”,分别命名为openToolStripMenuItemexitToolStripMenuItem
    • 可选:在主窗体上放置一个按钮(Button),用于测试其他功能,比如显示消息框。
  2. 事件绑定

    • NotifyIconMouseClick事件绑定处理方法,以响应鼠标点击托盘图标操作。
    • ContextMenuStrip中的菜单项绑定点击事件处理方法。
  3. icon设置

    • 窗体必须设置icon,修改窗体名称
    • notifyIcon1必须设置icon,修改notifyIcon1.text名称

三、代码实现

以下是完整的代码实现,涵盖了窗体初始化、托盘图标设置、事件处理等方面:

usingSystem;usingSystem.Windows.Forms;namespaceApp1{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();// 确保托盘图标关联了菜单notifyIcon1.ContextMenuStrip=contextMenuStrip1;// 将 Visible 设为 false 可以阻止窗体在启动时出现在任务栏和屏幕上this.Visible=false;// 订阅窗体关闭事件,拦截关闭操作this.FormClosing+=Form1_FormClosing;this.Resize+=Form1_Resize;notifyIcon1.MouseClick+=notifyIcon1_MouseClick;// 这里的 openToolStripMenuItem 和 exitToolStripMenuItem 必须与设计器中设置的 Name 属性一致this.openToolStripMenuItem.Click+=newSystem.EventHandler(this.openToolStripMenuItem_Click);this.exitToolStripMenuItem.Click+=newSystem.EventHandler(this.exitToolStripMenuItem_Click);// 初始化时,如果想默认启动就最小化到托盘this.WindowState=FormWindowState.Minimized;this.ShowInTaskbar=false;this.Hide();}// 拦截窗体关闭事件,改为隐藏到托盘privatevoidForm1_FormClosing(objectsender,FormClosingEventArgse){if(e.CloseReason==CloseReason.UserClosing)// 仅拦截用户点击×的情况{e.Cancel=true;// 取消关闭this.Hide();// 隐藏窗体this.ShowInTaskbar=false;// 隐藏任务栏图标}}privatevoidbutton1_Click(objectsender,EventArgse){MessageBox.Show("Hello, World!");}privatevoidForm1_Resize(objectsender,EventArgse){if(this.WindowState==FormWindowState.Minimized){this.Hide();// 隐藏窗体this.ShowInTaskbar=false;// 隐藏任务栏图标}}privatevoidnotifyIcon1_MouseClick(objectsender,MouseEventArgse){// 只有当点击的是鼠标左键时,才执行显示/隐藏逻辑if(e.Button==MouseButtons.Left){// 切换窗体的可见性if(!this.Visible){this.Show();this.WindowState=FormWindowState.Normal;this.ShowInTaskbar=true;this.Activate();}else{this.Hide();}}// 如果点击的是右键(MouseButtons.Right)或者中键,这里什么也不做// 系统会自动接管,显示设置好的 ContextMenuStrip (右键菜单)}// 托盘图标右键菜单:打开程序privatevoidopenToolStripMenuItem_Click(objectsender,EventArgse){this.Show();this.WindowState=FormWindowState.Normal;this.ShowInTaskbar=true;this.Activate();}// 托盘图标右键菜单:退出程序privatevoidexitToolStripMenuItem_Click(objectsender,EventArgse){DialogResultresult=MessageBox.Show("确定要退出程序吗?","退出确认",MessageBoxButtons.OKCancel,MessageBoxIcon.Question);// 如果用户点击了“确定”按钮if(result==DialogResult.OK){// 1. 隐藏托盘图标(可选:让图标在关闭前消失)notifyIcon1.Visible=false;// 2. 退出应用程序Application.Exit();}}privatevoidnotifyIcon1_MouseDoubleClick(objectsender,MouseEventArgse){openToolStripMenuItem_Click(sender,e);}}}
四、功能说明
  1. 启动与隐藏:程序启动时,主窗体将被隐藏,只显示托盘图标。
  2. 托盘图标交互
    • 左键单击托盘图标可以切换主窗体的显示与隐藏。
    • 右键单击托盘图标将弹出菜单,可以选择“打开程序”显示主窗体,或选择“退出程序”关闭应用程序。
  3. 关闭拦截:当用户尝试关闭主窗体时,程序将拦截关闭操作,转而隐藏主窗体并保持程序在后台运行。
五、总结

通过上述步骤,我们成功实现了一个带有托盘图标功能的Windows Forms应用程序。该程序能够在后台运行,并通过托盘图标与用户进行交互,提供了更好的用户体验和更灵活的操作方式。在实际开发中,可以根据具体需求对托盘图标的功能进行扩展和定制。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 5:23:23

一键部署HeyGem,轻松实现AI数字人视频批量制作

一键部署HeyGem,轻松实现AI数字人视频批量制作 在短视频内容爆发式增长的当下,企业宣传、知识科普、在线教育、电商带货等场景对高质量数字人视频的需求持续攀升。传统外包制作周期长、成本高、修改难;自研方案门槛高、投入大、迭代慢。有没…

作者头像 李华
网站建设 2026/8/21 17:34:25

一文说清Multisim安装常见问题及解决方案

以下是对您提供的博文内容进行 深度润色与结构重构后的技术博客正文 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言更贴近一线工程师真实表达 ✅ 打破模板化章节标题,以逻辑流替代“引言/概述/总结”等刻板结构 ✅ 将技术原理、实战经验、排错技巧有机融合,…

作者头像 李华
网站建设 2026/8/22 19:13:35

Clawdbot+Qwen3:32B Web网关安全加固:HTTPS、CORS、Token鉴权配置教程

ClawdbotQwen3:32B Web网关安全加固:HTTPS、CORS、Token鉴权配置教程 1. 为什么需要给Clawdbot网关加把“锁” 你已经成功把Clawdbot和Qwen3:32B大模型连上了——输入文字,秒出回答,界面清爽,本地部署稳如磐石。但先别急着发朋友…

作者头像 李华
网站建设 2026/8/28 0:08:24

告别广告骚扰?ReadCat:重新定义你的数字阅读体验

告别广告骚扰?ReadCat:重新定义你的数字阅读体验 【免费下载链接】read-cat 一款免费、开源、简洁、纯净、无广告的小说阅读器 项目地址: https://gitcode.com/gh_mirrors/re/read-cat 你是否曾在深夜追更时被弹窗广告惊吓?是否因阅读…

作者头像 李华
网站建设 2026/8/24 13:35:51

6个步骤让PS3手柄在Windows系统重生:DsHidMini驱动全攻略

6个步骤让PS3手柄在Windows系统重生:DsHidMini驱动全攻略 【免费下载链接】DsHidMini Virtual HID Mini-user-mode-driver for Sony DualShock 3 Controllers 项目地址: https://gitcode.com/gh_mirrors/ds/DsHidMini DsHidMini是一款为索尼DualShock 3手柄设…

作者头像 李华
网站建设 2026/8/25 7:50:23

Clawdbot+Qwen3-32B效果展示:软件架构图文字描述→Mermaid代码自动生成

ClawdbotQwen3-32B效果展示:软件架构图文字描述→Mermaid代码自动生成 1. 效果亮点:一句话看懂这个能力有多实用 你有没有试过对着一张密密麻麻的软件架构图发愁?想把它转成文档、分享给同事、或者嵌入到项目Wiki里,却卡在“怎么…

作者头像 李华