winform实现最小化至系统托盘
1.使用C#将几个Excel文件合并去重分类2.C#使用SqlSugar操作MySQL数据库实现简单的增删改查3.C#中的类和继承4.C#中的virtual和override关键字5.C#中的属性6.C#winform中使用SQLite数据库7.C#简化工作之实现网页爬虫获取数据8.C#中的委托(一)9.C#中的ref关键字10.C#中out关键字11.C#中内置的泛型委托Func与Action12.在winform blazor hybrid中绘图13.使用C#如何监控选定文件夹中文件的变动情况?14.C#设计模式之策略模式15.由浅入深理解C#中的事件16.C#设计模式之观察者模式17.C#设计模式之单例模式18.C#基于ScottPlot进行可视化19.C#使用MiniExcel导入导出数据到Excel/CSV文件
20.winform实现最小化至系统托盘
21.C#使用Bogus生成测试数据22.SemanticKernel如何基于自有数据聊天23.在winform中如何嵌入第三方软件窗体✨24.在winform中如何实现双向数据绑定?25.自己动手做一个批量doc转换为docx文件的小工具26.WPF中动画教程(DoubleAnimation的基本使用)27.WPF动画教程(PointAnimationUsingPath的使用)28.C#使用PaddleOCR进行图片文字识别✨29.WPF基础:在Canvas上绘制图形30.WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中31.使用归一化盒过滤器对图像进行平滑处理32.WPF/C#:如何显示具有层级关系的数据33.将彩色图转化为灰度图及其原理介绍34.WPF/C#:ProgressBar的基本使用35.在VB.NET项目中使用C#编写的代码36.WPF/C#:理解与实现WPF中的MVVM模式37.SemanticKernel:添加插件38.Avalonia:一个.NET跨平台UI框架39.WPF/C#:异常处理40.WPF/C#:程序关闭的三种模式41.wpfui:一个开源免费具有现代化设计趋势的WPF控件库42.WPF/C#:如何将数据分组显示43.WPF/C#:更改界面的样式44.LiveCharts2:简单灵活交互式且功能强大的.NET图表库45.WPF/C#:显示分组数据的两种方式46.WPF/C#:在DataGrid中显示选择框47.WPF/C#:数据绑定到方法48.WPF/C#:BusinessLayerValidation49.WPF/C#:如何实现拖拉元素50.WPF在.NET9中的重大更新:Windows 11 主题51.ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别52.动手学Avalonia:基于SemanticKernel与硅基流动构建AI聊天与翻译工具53.Avalonia应用在基于Linux的国产操作deepin上运行54.如何让其他模型也能在SemanticKernel中调用本地函数55.大语言模型的应用探索—AI Agent初探!56.动手学Avalonia:基于硅基流动构建一个文生图应用(一)57.WPF/C#:在WPF中如何实现依赖注入58.ScreenToGif:一款开源免费且好用的录屏转Gif软件59.WPF/C#:实现导航功能60.关于学习.NET的历程回顾与今后的探索实践方向61.入门Vue+.NET 8 Web Api记录(一)62.SemanticKernel/C#:检索增强生成(RAG)简易实践63.SemanticKernel/C#:使用Ollama中的对话模型与嵌入模型用于本地离线场景64.SemanticKernel/C#:实现接口,接入本地嵌入模型65.EF Core连接PostgreSQL数据库66.基于SiliconCloud快速体验GraphRag.Net67.AvaloniaChat:一个基于大语言模型用于翻译的简单应用68.最佳实践:在AvaloniaChat中接入SiliconCloud69.AvaloniaChat—从源码构建指南70.SimpleRAG:基于WPF与Semantic Kernel实现的一个简单的RAG应用71.Semantic Kernel/C#:接入智谱AI的两种方式72.AvaloniaChat-v0.0.2:兼容智谱AI 快速使用指南73.使用SiliconCloud快速体验SimpleRAG(手把手教程)74.使用Ollama本地离线体验SimpleRAG(手把手教程)75.Semantic Kernel/C#:一种通用的Function Calling方法,文末附经测试可用的大模型76.在SimpleRAG中使用SiliconCloud快速测试Function Calling77.SimpleTranslationAIAgent:基于C#与LLM的翻译AI Agent78.SimpleTranslationAIAgent借助SiliconCloud API 构建自己的专属翻译助手79.SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索80.SimpleAIAgent:使用免费的glm-4-flash即可开始构建简单的AI Agent应用81.SimpleRAG-v1.0.3:增加文件对话功能82.如何自己动手实现一个图片解答小助手83.AvaloniaTCP-v1.0.0:学习使用Avalonia/C#进行TCP通讯的一个简单Demo84.Microsoft.Extensions.AI 初探85.TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面86.VLM-OCR-Demo:一个使用VLM用于OCR任务的示例87.C#调用Python脚本的方式(一),以PaddleOCR-GUI为例88.C#调用Python代码的方式(二),以PaddleOCR-GUI为例89.C#使用Tesseract C++ API过程记录90.C#调用C++代码,以OpenCV为例91.使用C#构建一个论文总结AI Agent92.PaperAssistant:使用Microsoft.Extensions.AI实现93.C# AIModelRouter:使用不同的AI模型完成不同的任务NotifyIcon类介绍
NotifyIcon 是 .NET中的一个类,它用于在系统托盘中显示图标。这个类在 System.Windows.Forms 命名空间下。
使用 NotifyIcon 类,你可以在系统托盘中创建一个图标,当用户点击或右键点击这个图标时,可以触发一些事件。例如,你可以创建一个上下文菜单(右键菜单),或者当用户双击图标时打开一个窗口。
示例
通过设计页面使用
在设计页面中拖拽添加NotifyIcon:
进行相关设置(在后面通过代码使用时会进行介绍):
这里的contextMenuStrip1也是由自己拖拽来的:
设置contextMenuStrip1:
重写窗体关闭事件处理程序:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true; // 取消关闭窗体
this.Hide(); // 隐藏窗体
this.notifyIcon1.Visible = true; // 显示托盘图标
}
}
双击notifyIcon1写鼠标双击事件处理程序:
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
}
双击显示窗体按钮,写点击事件处理程序:
private void 显示ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
}
双击显示气泡按钮,写点击事件处理程序:
private void 显示气泡2ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 显示气泡提示,参数表示提示显示的时间(单位:毫秒)
notifyIcon1.ShowBalloonTip(3000);
}
双击退出按钮,写点击事件处理程序:
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit(); // 退出应用程序
}
查看实现效果:
全部代码:
namespace Minimized_to_the_system_tray_demo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true; // 取消关闭窗体
this.Hide(); // 隐藏窗体
this.notifyIcon1.Visible = true; // 显示托盘图标
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
}
private void 显示ToolStripMenuItem_Click(object sender, EventArgs e)
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
}
private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit(); // 退出应用程序
}
private void 显示气泡2ToolStripMenuItem_Click(object sender, EventArgs e)
{
// 显示气泡提示,参数表示提示显示的时间(单位:毫秒)
notifyIcon1.ShowBalloonTip(3000);
}
}
}
通过代码实现
首先全局声明一个NotifyIcon对象与一个ContextMenuStrip对象:
private NotifyIcon notifyIcon1;
private ContextMenuStrip menuStrip;
menuStrip的相关设置:
// 创建 ContextMenuStrip。
this.menuStrip = new ContextMenuStrip();
// 创建并初始化 ToolStripMenuItem 对象。
ToolStripMenuItem item1 = new ToolStripMenuItem("显示窗体");
item1.Click += (object? sender, EventArgs e) =>
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
};
ToolStripMenuItem item2 = new ToolStripMenuItem("显示气泡");
item2.Click += (object? sender, EventArgs e) =>
{
// 显示气泡提示,参数表示提示显示的时间(单位:毫秒)
notifyIcon1.ShowBalloonTip(3000);
};
ToolStripMenuItem item3 = new ToolStripMenuItem("退出");
item3.Click += (object? sender, EventArgs e) =>
{
Application.Exit(); // 退出应用程序
};
// 将 ToolStripMenuItem 对象添加到 ContextMenuStrip 的 Items 集合中。
this.menuStrip.Items.Add(item1);
this.menuStrip.Items.Add(item2);
this.menuStrip.Items.Add(item3);
notifyIcon1的相关设置:
// 创建 NotifyIcon。
this.notifyIcon1 = new NotifyIcon();
// Icon 属性设置将在系统托盘中显示的图标。
notifyIcon1.Icon = new Icon("你的ico图标路径"");
// ContextMenu 属性设置当右键点击系统托盘图标时显示的菜单。
notifyIcon1.ContextMenuStrip = this.menuStrip;
// Text 属性设置当鼠标悬停在系统托盘图标上时显示的提示文本。
notifyIcon1.Text = "最小化至系统托盘示例程序";
notifyIcon1.Visible = true;
// 气泡提示相关设置
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon1.BalloonTipTitle = "提示";
notifyIcon1.BalloonTipText = "您有一条新消息";
// 注册鼠标双击事件
notifyIcon1.MouseDoubleClick += NotifyIcon1_MouseDoubleClick;
notifyIcon1鼠标双击事件处理程序:
private void NotifyIcon1_MouseDoubleClick(object? sender, MouseEventArgs e)
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
}
重写窗体关闭事件处理程序:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true; // 取消关闭窗体
this.Hide(); // 隐藏窗体
this.notifyIcon1.Visible = true; // 显示托盘图标
}
}
实现效果与上述相同。
全部代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Minimized_to_the_system_tray_demo
{
public partial class Form2 : Form
{
private NotifyIcon notifyIcon1;
private ContextMenuStrip menuStrip;
public Form2()
{
InitializeComponent();
// 创建 NotifyIcon。
this.notifyIcon1 = new NotifyIcon();
// 创建 ContextMenuStrip。
this.menuStrip = new ContextMenuStrip();
// 创建并初始化 ToolStripMenuItem 对象。
ToolStripMenuItem item1 = new ToolStripMenuItem("显示窗体");
item1.Click += (object? sender, EventArgs e) =>
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
};
ToolStripMenuItem item2 = new ToolStripMenuItem("显示气泡");
item2.Click += (object? sender, EventArgs e) =>
{
// 显示气泡提示,参数表示提示显示的时间(单位:毫秒)
notifyIcon1.ShowBalloonTip(3000);
};
ToolStripMenuItem item3 = new ToolStripMenuItem("退出");
item3.Click += (object? sender, EventArgs e) =>
{
Application.Exit(); // 退出应用程序
};
// 将 ToolStripMenuItem 对象添加到 ContextMenuStrip 的 Items 集合中。
this.menuStrip.Items.Add(item1);
this.menuStrip.Items.Add(item2);
this.menuStrip.Items.Add(item3);
// Icon 属性设置将在系统托盘中显示的图标。
notifyIcon1.Icon = new Icon("你的ico图标路径");
// ContextMenu 属性设置当右键点击系统托盘图标时显示的菜单。
notifyIcon1.ContextMenuStrip = this.menuStrip;
// Text 属性设置当鼠标悬停在系统托盘图标上时显示的提示文本。
notifyIcon1.Text = "最小化至系统托盘示例程序";
notifyIcon1.Visible = true;
notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
notifyIcon1.BalloonTipTitle = "提示";
notifyIcon1.BalloonTipText = "您有一条新消息";
notifyIcon1.MouseDoubleClick += NotifyIcon1_MouseDoubleClick;
}
private void NotifyIcon1_MouseDoubleClick(object? sender, MouseEventArgs e)
{
this.Show(); // 显示窗体
this.WindowState = FormWindowState.Normal; // 恢复窗体正常大小
this.notifyIcon1.Visible = false; // 隐藏托盘图标
}
private void Form2_Load(object sender, EventArgs e)
{
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (e.CloseReason == CloseReason.UserClosing)
{
e.Cancel = true; // 取消关闭窗体
this.Hide(); // 隐藏窗体
this.notifyIcon1.Visible = true; // 显示托盘图标
}
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库