来源: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

转 点击关闭时最小化到任务栏相关推荐

  1. Outlook关闭时最小化到任务栏的完美解决方法

    在国外的一个网站上看到了一个com组件,可以让Outlook关闭时最小化. 现在给大家分享一下: 这是用到的dll有32位和64位两种,可根据你自己的机器选择 我用的是outlook 2013,(一定 ...

  2. outlook2016关闭时最小化到任务栏的完美解决方法

    首先,打扰大家一下,现在人工智能非常火爆,薪资待遇都很高,许多朋友都想学,但是一般的教程都比较难懂.最近写了一个这方面的教程,非常适合小白入门,不仅通俗易懂而且还很风趣幽默.大家感兴趣的话可以点进去看 ...

  3. Outlook开机自启+关闭时最小化

    文章目录 开机自启 关闭时最小化 参考文献 开机自启 资源管理器路径中输入 shell:startup 如本人的结果为 C:\Users\Administrator\AppData\Roaming\M ...

  4. VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题)

    VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题) 参考文章: (1)VC++ 实现VC程序启动时最小化到任务栏(完美解决闪烁问题) (2)https://www.cnblogs.com/ ...

  5. 如何设置outlook点击关闭后最小化功能

    测试outlook版本:outlook2019 windows版本:win10专业版 问题:点击outlook关闭按钮后,outlook默认不支持最小化,而是直接关闭退出.很影响体验. 解决方案: 1 ...

  6. Mac 开发中如何设置 关闭 以及最小化 最大化按钮事件处理

    Xcode默认的向导生成的工程的带有关闭,最小化,最大化这几个按钮, 关闭按钮的事件,最让窗口最小化到Dock中,但当你点击Dock却无法恢复,而在Window菜单中也不会多一个与你程序同名的&quo ...

  7. 通用方法 关闭Outlook最小化非直接退出

    我用的是outlook 2013 保持Outlook一直运行,关闭等于最小化 第一步:将KeepOutlookRunning-64bit.dll拷贝到C:\Windows\System32目录下,注意 ...

  8. java swing最小化_Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)...

    Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果) package swing; import java.awt.AWTException; import java ...

  9. 【转】ubuntu 12.04 LTS将关闭最大化最小化移动到右上角

    原文网址:http://www.4byte.cn/learning/114801.html ubuntu 12.04 LTS将关闭最大化最小化移动到右上角 还是按下"ALT +F2" ...

最新文章

  1. MBA 工商管理课程-风险型决策方法
  2. (转自Timon's wang blogs)C#实现web信息自动抓取
  3. css 链接悬浮动画
  4. OpenCV Shi-Tomasi corner 检测器
  5. UV认证应用安全标准的目的
  6. 线段树空间容纳且最上边的数(单点更新)
  7. CGRect vs CGPoint vs CGSize
  8. http请求POST方式发送获得返回值
  9. 领域搜索算法 是什么 和遗传算法、模拟退火算法、禁忌搜索算法、模糊优化 算法、微粒群算法关系
  10. 制作一个简单HTML个人网页网页(HTML+CSS)web前端大作业
  11. NP架构-汇聚层路由器完美选择
  12. java date 年龄_Java 根据年月日精确计算年龄
  13. OpenCV/C++:点线面相关计算
  14. 编辑视频贴纸软件_12款自媒体视频剪辑制作软件,爆款内容必备神器!
  15. 【10w字】超详细【百分百拿offer】的面试教程,集合5000多家软件测试公司面试题。
  16. C/C++_atoi,itoa功能及其实现原理
  17. Java web框架
  18. java 打成war_JAVA语言之Springboot打成war包并在tomcat中运行的部署方法
  19. android treble,Android Treble 简单介绍.ppt
  20. github提交代码命令(向开源社区提交代码)

热门文章

  1. org.springframework.web.client.RestClientException: Could not extract response
  2. delphi2010中FastReport的安装方法
  3. java代码中执行sql报错:java.sql.SQLException: ORA-00923: 未找到要求的 FROM 关键字
  4. C#在Web项目中关闭Excel进程的方法
  5. 关于Silverlight安装问题之四
  6. 关于 ssh-keygen 的一点疑问
  7. ESRI2017总结(深度好文有彩蛋——数据处理服务方案总结)
  8. 设置和使用地图的范围—ArcGIS API for JavaScript
  9. Kubeadm installation
  10. 程序转制作人——游戏设计课程导论