实现步骤

  • 创建 NotifyIcon 控件并设置属性;
  • 编写 NotifyIcon 响应控制事件;
  • 在主窗体的Load事件中将 NotifyIcon 添加到系统托盘;
  • 程序退出时,移除系统托盘的 NotifyIcon;

NotifyIcon 控件,通常用于在系统托盘中显示图标,通过使用它就可以我们想要的效果。

属性 描述
Icon 在系统托盘中显示的图标
Text 鼠标悬停在图标时显示的文本
Visible 指定是否可见

常用方法

方法 描述
ShowContextMenu 在系统托盘上下文菜单中显示指定的菜单

添加控件

将NotifyIcon和一个ContextMenuStrip控件。拖到主窗体中可以修改控件名称

  • NotifyIcon 托盘图标
  • ContextMenuStrip 托盘图标右击弹出的菜单

设置控件

点击 ContextMenuStrip 右上方的三角图标 -> 编辑项,弹出项信合编辑器

添加右健菜单信息

添加主窗体事件

在最小化或关闭主窗体时,显示在任务栏托盘区域,实现了单击关闭时,不真正关闭程序,而是将主界面隐藏HIDE掉,同时开始显示托盘菜单。

//  只有Form_Closing事件中 e.Cancel可以用。
// 你的是Form_Closed事件。 Form_Closed事件时窗口已关了 ,Cancel没用了;
// Form_Closing是窗口即将关闭时询问你是不是真的关闭才有Cancel事件 private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{ // 注意判断关闭事件reason来源于窗体按钮,否则用菜单退出时无法退出!
if (e.CloseReason == CloseReason.UserClosing)
{
//取消"关闭窗口"事件
e.Cancel = true; // 取消关闭窗体 //使关闭时窗口向右下角缩小的效果
this.WindowState = FormWindowState.Minimized;
this.mainNotifyIcon.Visible = true;
//this.m_cartoonForm.CartoonClose();
this.Hide();
return;
}
}

实现双击托盘打开主程序

//  添加托盘程序
// 版本更新自1.0.1
private void mainNotifyIcon_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (this.Visible)
{
this.WindowState = FormWindowState.Minimized;
this.mainNotifyIcon.Visible = true;
this.Hide();
}
else
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
this.Activate();
}
}

// 添加托盘程序右键菜单项
// 版本更新自1.0.1
// 退出
// 添加日期 -- 2015-07-29 21:44
private async void toolStripMenuItemQuit_Click(object sender, EventArgs e)
{
if (MessageBox.Show("你确定要退出?", "系统提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1) == DialogResult.Yes)
{ this.mainNotifyIcon.Visible = false;
this.Close();
this.Dispose();
System.Environment.Exit(System.Environment.ExitCode); }
}

C# WinForm 托盘程序的更多相关文章

  1. WinForm设置任务栏托盘程序

    程序设计界面如下图所示: 1.在程序初始化加载的时候设置程序图标,具体code如下: private void Form1_Load(object sender, EventArgs e) { //t ...

  2. winform托盘时,要运行一个实例,解决办法

    需求:winform应用程序,当隐藏到托盘时,再次运行exe程序,让其只运行一个实例,并且把窗口从托盘中显示出来 应用程序名可以通过下面代码,获取到: Process current = Proces ...

  3. 用c#创建支持多语言的WinForm应用程序

    实现多语言的方法可能有使用资源文件,或者配置xml两种方法吧.没时间研究过多,学习了一下使用资源文件的方法,成功了. 在.net2.0 中,m$ 为我们提供了一种简单方便的方法, 使用资源文件 1.新 ...

  4. Winform应用程序实现通用消息窗口

    记得我之前发表过一篇文章<Winform应用程序实现通用遮罩层>,是实现了透明遮罩的消息窗口,功能侧重点在动图显示+消息提醒,效果看上去比较的炫,而本篇我又来重新设计通用消息窗口,功能重点 ...

  5. 解决Winform应用程序中窗体背景闪烁的问题

    本文转载:https://my.oschina.net/Tsybius2014/blog/659742 我的操作系统是Win7,使用的VS版本是VS2012,文中的代码都是C#代码. 这几天遇到一个问 ...

  6. Winform应用程序实现通用遮罩层

    在WEB上,我们在需要进行大数据或复杂逻辑处理时,由于耗时较长,一般我们会在处理过程中的页面上显示一个半透明的遮罩层,上面放个图标或提示:正在处理中...等字样,这样用户体验就比较好了,然而如果在Wi ...

  7. C# WinForm 应用程序 开启Console窗口

    /********************************************************************************* * C# WinForm 应用程序 ...

  8. WinForm应用程序之注册模块的设计与实现

    Posted on 2012-11-13 10:21 星星之火116 阅读(3260) 评论(4) 编辑 收藏 我们在安装一些桌面应用程序的时候,往往在会有提示当前用户使用的是试用版,要进行注册.刚好 ...

  9. delphi 托盘程序 转

    Delphi的托盘编程   .现在很多程序都用这个,比如傲游,迅雷等,主要代码如下: uses Windows, Messages, SysUtils, Variants, Classes, Grap ...

  10. Delphi 托盘程序实现 转

    unit MainUnit; interface uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, F ...

随机推荐

  1. DRF-Parser解析器组件源码分析和应用

    1. 解析器源码分析 注意:以下源码为了方便理解已进行简化,只保留了解析器相关的代码 # 视图函数: class MyView(APIView): def post(self, request): p ...

  2. UE4纯C++实现游戏快捷栏

    要想创建一个游戏中的快捷栏我们往往通过以下几步来实现(目录导航): 1.创建UI:我们首先需要有在游戏视口中添加一个快捷栏UI界面,以供玩家看到自身的快捷栏. 2.物品读取:其次有了界面之后我们需要往 ...

  3. C# 串口读取并转换字符串

    public string ReadString() { ASCIIEncoding ascii = new ASCIIEncoding(); byte[] readBuffer = new byte ...

  4. 使用NTP,该如何同步时间?一文详解!

    ​ 一.NTP通信概述 很多场景中,由于业务需要,模块需要保持正确的系统时钟,才能正常工作.但是模块上电后的初试时间戳是946713600(即2000/01/01,16:00:00),所以同步时钟成为 ...

  5. CF1503E 2-Coloring

    CF1503E 2-Coloring cjx 组合强. 思路 观察一下题目,不难发现只有当黄色形成如下的单峰时才合法. (染错色了,将就一下) 其中两座峰的峰顶高度相加等于 \(m\),为了方便统计, ...

  6. laravel之验证器

    开发中使用框架自带验证器进行参数验证 1.定义验证器基类,定义失败返回值 新建基础类文件 app > Http > Requests > BaseRequest.php <?p ...

  7. Django消息队列之django-rq

    github:https://github.com/rq/django-rq RQ(Redis Queue),人如其名,用 redis 做的队列任务 redis ,众所周知, 它的列表可以做队列,rq ...

  8. 服务器间文件实时双向同步(rsync+inotify)

    场景: 主从服务器项目文件实时双向同步(参考:http://www.xcx1024.com/ArtInfo/3026389.html) 一.rsync安装 yum在线: yum install -y ...

  9. Element-UI 调整

    1.对话框 当打开的对话框页面元素众多,俨然一个iframe页面时,可以做2个优化: 滚动条:对话框去滚动,当对话框内容过多时,把滚动条控制在对话框内部,避免出现页面级的滚动条 标题栏:优化对话框标题 ...

  10. Vue2 面试题 (2023-09-22更新)

    基础 Vue2.0 兼容 ie 哪个版本? 不支持 ie8,部分兼容 ie9,完全兼容 ie10 因为 vue 的响应式原理是基于 es5 的 Object.defineProperty 这个方法不支 ...