转 点击关闭时最小化到任务栏
来源:http://www.2cto.com/kf/201401/274489.html
现在很多软件如360杀毒软件、酷狗音乐都拥有最小化至任务栏并在系统托盘区留下图标,我的项目同样需要该功能.所以本文主要叙述如何使用C#让窗体最小化至任务栏,同时在系统托盘区的图标点击左键能显示窗体,右键能关联控件显示3个常用功能.主要涉及到的控件是NotifyIcon和ContextMenuStrip,此类文章较多,希望作者以自己的独特视角给予大家帮助.
一.界面操作
1.创建"Windows窗体应用程序"项目,从"工具箱"中添加NotifyIcon(运行时期间在Windows任务栏右侧的通知区域显示图标).鼠标右击notifyIcon1属性,为控件属性Icon添加图标,Text属性为"CSDN".
2.添加ContextMenuStrip(当用户右击关联控件时显示快键菜单).鼠标右键contextMenuStrip1属性,进入Items添加或右键"编辑项".添加3个toolStripMenuItem,设置其Text为"显示窗体"、"隐藏窗体"、"退出".如下图所示:
3.关联系统托盘图标与右键菜单.设置notifyIcon1的ContextMenuStrip属性为contextMenuStrip1关联两个控件.运行程序,右下角任务栏的系统托盘处图标点击右键显示如下图所示:
二.窗体设置
窗体设置主要是当窗体点击"退出"按钮时,任务栏仍然显示图标且程序没有退出.设置Form1的MaximizeBox(窗体是否能最大化)属性设置为False,让其不能最大化.并为Form1添加FormClosing(当用户关闭窗体时,在窗体已关闭并制定关闭原因前发生)事件.如下图所示.
添加代码如下,主要实现的功能是当用户点击窗体"关闭"按钮或通过Alt+F4快捷关闭时,取消关闭操作且窗体隐藏,任务栏图标仍然显示:
//窗体关闭前发生事件 private void Form1_FormClosing(object sender, FormClosingEventArgs e) {//窗体关闭原因为单击"关闭"按钮或Alt+F4if (e.CloseReason == CloseReason.UserClosing){e.Cancel = true; //取消关闭操作 表现为不关闭窗体this.Hide(); //隐藏窗体 } }
其中:FormClosingEventArgs 类为FormClosing事件提供数据,其属性Cancel获取或设置是否应取消事件的值,CloseReason获取一个值,该值指示关闭窗体的原因.(详见MSDN FormClosingEventArgs 类)
注意:添加的事件是Form_Closing-窗体关闭前发生,而不是Form_Closed窗体已关闭发生.它没有e.Cancel属性,会提示错误 "System.Windows.Forms.FormClosedEventArgs"不包含Cancel的定义.
三.系统托盘功能
常见的窗体最小化至任务栏(系统托盘)图标的功能:
1.当鼠标左键点击图标时,显示窗体.
2.当鼠标右键点击图标时,显示"显示窗体"\"隐藏窗体"\"退出"菜单栏,并有相对应的功能.
具体操作是:分别点击"显示窗体"\"隐藏窗体"\"退出"在其属性栏中添加"Click"事件.添加代码如下:
//"显示窗体"单击事件 private void toolStripMenuItem1_Click(object sender, EventArgs e) {this.Show(); //窗体显示this.WindowState = FormWindowState.Normal; //窗体状态默认大小this.Activate(); //激活窗体给予焦点 }//"隐藏窗体"单击事件 private void toolStripMenuItem2_Click(object sender, EventArgs e) {this.Hide(); //隐藏窗体 }//"退出"单击事件 private void toolStripMenuItem3_Click(object sender, EventArgs e) {//点击"是(YES)"退出程序if (MessageBox.Show("确定要退出程序?", "安全提示",System.Windows.Forms.MessageBoxButtons.YesNo,System.Windows.Forms.MessageBoxIcon.Warning)== System.Windows.Forms.DialogResult.Yes){notifyIcon1.Visible = false; //设置图标不可见this.Close(); //关闭窗体this.Dispose(); //释放资源Application.Exit(); //关闭应用程序窗体 } }
其中,窗体的状态FormWindowState有Minimized(最小化)、Maximized(最大化)、Normal(默认大小).有的程序设置sizechanged事件,当用户点击"最小化"按钮窗体尺寸变化时才最小化至任务栏(系统托盘).但我认为打开程序时就有最小化图标更好,同时添加FormClosing事件更符合用户使用.点击"退出"运行结果如下图所示:
最后添加鼠标左键图标显示窗体功能.右键notifyIcon1属性,添加MouseClick(鼠标单击组件时发生)事件.添加代码如下:
//鼠标左键图标事件 private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) {//点击鼠标"左键"发生if (e.Button == MouseButtons.Left){this.Visible = true; //窗体可见this.WindowState = FormWindowState.Normal; //窗体默认大小this.notifyIcon1.Visible = true; //设置图标可见 } }
四.完整代码
源代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.Linq; 7 using System.Text; 8 using System.Threading.Tasks; 9 using System.Windows.Forms; 10 11 namespace WinFormMin 12 { 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 } 19 20 //窗体关闭前发生事件 21 private void Form1_FormClosing(object sender, FormClosingEventArgs e) 22 { 23 //窗体关闭原因为单击"关闭"按钮或Alt+F4 24 if (e.CloseReason == CloseReason.UserClosing) 25 { 26 e.Cancel = true; //取消关闭操作 表现为不关闭窗体 27 this.Hide(); //隐藏窗体 28 } 29 } 30 31 //"显示窗体"单击事件 32 private void toolStripMenuItem1_Click(object sender, EventArgs e) 33 { 34 this.Show(); //窗体显示 35 this.WindowState = FormWindowState.Normal; //窗体状态默认大小 36 this.Activate(); //激活窗体给予焦点 37 } 38 39 //"隐藏窗体"单击事件 40 private void toolStripMenuItem2_Click(object sender, EventArgs e) 41 { 42 this.Hide(); //隐藏窗体 43 } 44 45 //"退出"单击事件 46 private void toolStripMenuItem3_Click(object sender, EventArgs e) 47 { 48 //点击"是(YES)"退出程序 49 if (MessageBox.Show("确定要退出程序?", "安全提示", 50 System.Windows.Forms.MessageBoxButtons.YesNo, 51 System.Windows.Forms.MessageBoxIcon.Warning) 52 == System.Windows.Forms.DialogResult.Yes) 53 { 54 notifyIcon1.Visible = false; //设置图标不可见 55 this.Close(); //关闭窗体 56 this.Dispose(); //释放资源 57 Application.Exit(); //关闭应用程序窗体 58 } 59 } 60 61 //鼠标左键图标事件 62 private void notifyIcon1_MouseClick(object sender, MouseEventArgs e) 63 { 64 //点击鼠标"左键"发生 65 if (e.Button == MouseButtons.Left) 66 { 67 this.Visible = true; //窗体可见 68 this.WindowState = FormWindowState.Normal; //窗体默认大小 69 this.notifyIcon1.Visible = true; //设置图标可见 70 } 71 } 72 } 73 }
转载于:https://www.cnblogs.com/mrethan/p/4574175.html
转 点击关闭时最小化到任务栏相关推荐
- Outlook关闭时最小化到任务栏的完美解决方法
在国外的一个网站上看到了一个com组件,可以让Outlook关闭时最小化. 现在给大家分享一下: 这是用到的dll有32位和64位两种,可根据你自己的机器选择 我用的是outlook 2013,(一定 ...
- outlook2016关闭时最小化到任务栏的完美解决方法
首先,打扰大家一下,现在人工智能非常火爆,薪资待遇都很高,许多朋友都想学,但是一般的教程都比较难懂.最近写了一个这方面的教程,非常适合小白入门,不仅通俗易懂而且还很风趣幽默.大家感兴趣的话可以点进去看 ...
- Outlook开机自启+关闭时最小化
文章目录 开机自启 关闭时最小化 参考文献 开机自启 资源管理器路径中输入 shell:startup 如本人的结果为 C:\Users\Administrator\AppData\Roaming\M ...
- VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)
VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题) 参考文章: (1)VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题) (2)https://www.cnblogs.com/ ...
- 如何设置outlook点击关闭后最小化功能
测试outlook版本:outlook2019 windows版本:win10专业版 问题:点击outlook关闭按钮后,outlook默认不支持最小化,而是直接关闭退出.很影响体验. 解决方案: 1 ...
- Mac 开发中如何设置 关闭 以及最小化 最大化按钮事件处理
Xcode默认的向导生成的工程的带有关闭,最小化,最大化这几个按钮, 关闭按钮的事件,最让窗口最小化到Dock中,但当你点击Dock却无法恢复,而在Window菜单中也不会多一个与你程序同名的&quo ...
- 通用方法 关闭Outlook最小化非直接退出
我用的是outlook 2013 保持Outlook一直运行,关闭等于最小化 第一步:将KeepOutlookRunning-64bit.dll拷贝到C:\Windows\System32目录下,注意 ...
- java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...
Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果) package swing; import java.awt.AWTException; import java ...
- 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角
原文网址:http://www.4byte.cn/learning/114801.html ubuntu 12.04 LTS将关闭最大化最小化移动到右上角 还是按下"ALT +F2" ...
最新文章
- MBA 工商管理课程-风险型决策方法
- (转自Timon's wang blogs)C#实现web信息自动抓取
- css 链接悬浮动画
- OpenCV Shi-Tomasi corner 检测器
- UV认证应用安全标准的目的
- 线段树空间容纳且最上边的数(单点更新)
- CGRect vs CGPoint vs CGSize
- http请求POST方式发送获得返回值
- 领域搜索算法 是什么 和遗传算法、模拟退火算法、禁忌搜索算法、模糊优化 算法、微粒群算法关系
- 制作一个简单HTML个人网页网页(HTML+CSS)web前端大作业
- NP架构-汇聚层路由器完美选择
- java date 年龄_Java 根据年月日精确计算年龄
- OpenCV/C++:点线面相关计算
- 编辑视频贴纸软件_12款自媒体视频剪辑制作软件,爆款内容必备神器!
- 【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。
- C/C++_atoi,itoa功能及其实现原理
- Java web框架
- java 打成war_JAVA语言之Springboot打成war包并在tomcat中运行的部署方法
- android treble,Android Treble 简单介绍.ppt
- github提交代码命令(向开源社区提交代码)
热门文章
- org.springframework.web.client.RestClientException: Could not extract response
- delphi2010中FastReport的安装方法
- java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
- C#在Web项目中关闭Excel进程的方法
- 关于Silverlight安装问题之四
- 关于 ssh-keygen 的一点疑问
- ESRI2017总结(深度好文有彩蛋——数据处理服务方案总结)
- 设置和使用地图的范围—ArcGIS API for JavaScript
- Kubeadm installation
- 程序转制作人——游戏设计课程导论