winform实现最小化至系统托盘

NotifyIcon类介绍

NotifyIcon 是 .NET中的一个类,它用于在系统托盘中显示图标。这个类在 System.Windows.Forms 命名空间下。
使用 NotifyIcon 类,你可以在系统托盘中创建一个图标,当用户点击或右键点击这个图标时,可以触发一些事件。例如,你可以创建一个上下文菜单(右键菜单),或者当用户双击图标时打开一个窗口。

示例

通过设计页面使用

在设计页面中拖拽添加NotifyIcon:

image-20240219205552725

进行相关设置(在后面通过代码使用时会进行介绍):

image-20240219214654690

这里的contextMenuStrip1也是由自己拖拽来的:

image-20240219215003889

设置contextMenuStrip1:

image-20240219215048745

重写窗体关闭事件处理程序:

 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();  // 退出应用程序}

查看实现效果:

winform实现最小至系统托盘效果

全部代码:

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;  // 显示托盘图标}}}
}

公众号:DotNet学习交流,查看更多内容,欢迎你的到来!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/477960.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于项目中websocket的socket.io客户端js库的应用

1.如何使用客户端js库? pnpm add socket.io-client2.如何建立连接? import io from socket.io-client // 参数1:不传默认是当前服务域名,开发中传入服务器地址 // 参数2:配置参数,根据需要再来介绍 const socket i…

备战蓝桥杯---动态规划(应用1)

话不多说,直接看题: 首先我们考虑暴力,用二维前缀和即可,复杂度为o(n^4). 其实,我们不妨枚举任意2行,枚举以这个为边界的最大矩阵。 我们把其中的每一列前缀和维护出来,相当于把一个矩阵压缩成…

2.19作业

1.使用fread,fwrite完成两个文件之间的拷贝 程序代码&#xff1a; #include <myhead.h>int main(int argc, const char *argv[]) {if(argc!3){printf("input file error\n");printf("usage:./a.out srcfile destfile\n");return -1;}FILE *fpNULL;…

美国突然致敬中本聪

作者&#xff1a;秦晋 有点看不懂美国的神操作。 2月16日&#xff0c;据《Bitcoin Magazine》报道&#xff0c;比特币的竞争对手、美国参议员伊丽莎白-沃伦对比特币的立场突然180度大转弯。由反对立场转为支持立场。让很多行业媒体出乎意料&#xff0c;甚至惊掉下巴。 报道称&a…

Code Composer Studio (CCS) - 全局搜索功能

Code Composer Studio [CCS] - 全局搜索功能 1. Ctrl H&#xff0c;全局搜索功能References 1. Ctrl H&#xff0c;全局搜索功能 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

Java实现Dfs算法(基本讲解)

目录 一、Dfs算法的概念 二、Dfs算法的设计步骤 三、Dfs算法模板 四、Dfs算法经典例题 &#xff08;1&#xff09;全排列 &#xff08;2&#xff09;N皇后 一、Dfs算法的概念 Depth First Search 即 DFS&#xff0c;意为深度优先搜索&#xff0c;是所有的搜索手段之一。它…

22-k8s中pod的调度-亲和性affinity

一、概述 在k8s当中&#xff0c;“亲和性”分为三种&#xff0c;节点亲和性、pod亲和性、pod反亲和性&#xff1b; 亲和性分类名称解释说明nodeAffinity节点亲和性通过【节点】标签匹配&#xff0c;用于控制pod调度到哪些node节点上&#xff0c;以及不能调度到哪些node节点上&…

2.19学习总结

1.中位数 2.统计和 3.铺设道路 4.岛屿个数 5.冶炼金属 6.飞机降落 7.接龙数列 中位数https://www.luogu.com.cn/problem/P1168 题目描述 给定一个长度为 &#xfffd;N 的非负整数序列 &#xfffd;A&#xff0c;对于前奇数项求中位数。 输入格式 第一行一个正整数 &#xfff…

NoSQL 数据库有哪些类型?

NoSQL 数据库主要可以分为下面四种类型&#xff1a; 键值&#xff1a;键值数据库是一种较简单的数据库&#xff0c;其中每个项目都包含键和值。这是极为灵活的 NoSQL 数据库类型&#xff0c;因为应用可以完全控制 value 字段中存储的内容&#xff0c;没有任何限制。Redis 和 D…

使用openeuler 22.03替代CentOS 7.9,建立虚拟机详细步骤

进入浏览器搜索网址下载openeuler 22.03镜像文件 https://mirrors.huaweicloud.com/openeuler/openEuler-22.03-LTS-SP3/ISO/x86_64/openEuler-22.03-LTS-SP3-x86_64-dvd.iso 打开VMware Workstation新建一个虚拟机&#xff1a; 自定义虚拟机位置 加入下载好的openeuler镜像文件…

Mysql的隔离级别和锁

Mysql的事务隔离级别 脏读&#xff1a;读到了未提交的数据 2、不可重复读&#xff1a; 两次读取的数据中间被修改&#xff0c;读取的数据不同。 幻读 数据库锁 悲观锁和乐观锁 死锁 一般发生在多线程执行过程中&#xff0c;因为争抢资源造成线程之间相互等待&#xff0c;这…

数据结构中图的概念以及遍历算法的实现

在数据结构中&#xff0c;图&#xff08;Graph&#xff09;是由节点&#xff08;Vertex&#xff09;和连接节点的边&#xff08;Edge&#xff09;组成的一种非线性数据结构。图可以用来表示各种实际问题中的关系和连接&#xff0c;如社交网络、道路网络、电路等。 图由两个主要…