现在很多软件如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;            //设置图标可见}
}

四.完整代码

源代码如下:

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 WinFormMin
{public partial class Form1 : Form{public Form1(){InitializeComponent();}//窗体关闭前发生事件private void Form1_FormClosing(object sender, FormClosingEventArgs e){//窗体关闭原因为单击"关闭"按钮或Alt+F4if (e.CloseReason == CloseReason.UserClosing){e.Cancel = true;           //取消关闭操作 表现为不关闭窗体this.Hide();               //隐藏窗体}}//"显示窗体"单击事件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();            //关闭应用程序窗体}}//鼠标左键图标事件private void notifyIcon1_MouseClick(object sender, MouseEventArgs e){//点击鼠标"左键"发生if (e.Button == MouseButtons.Left){this.Visible = true;                        //窗体可见this.WindowState = FormWindowState.Normal;  //窗体默认大小this.notifyIcon1.Visible = true;            //设置图标可见}}}
}

五.总结

该文章主要是结合自己的项目完成,主要是窗体最小化至任务栏(系统托盘)同时包括一些常用操作.同时下面两篇文章涉及到点击"最小化"按钮才实现最小到任务栏的文章,与该篇文章略有不同,如果想做这方面的可以阅读.感谢两位文章作者.
http://blog.sina.com.cn/s/blog_45eaa01a01013u36.html
http://blog.csdn.net/furturerock/article/details/5687793
最后,希望文章对大家有所帮助,如果该篇文章中有错误或不足之处,请大家海涵!
(By:Eastmount 2014-1-21 下午6点 http://blog.csdn.net/eastmount)

C# 系统应用之窗体最小化至任务栏及常用操作相关推荐

  1. WPF窗体最小化到任务栏

    WPF程序也可以很轻松的实现类似QQ那样最小化到任务栏的功能. WindowState ws;WindowState wsl;NotifyIcon notifyIcon; #region Constr ...

  2. 转 点击关闭时最小化到任务栏

    来源:http://www.2cto.com/kf/201401/274489.html 现在很多软件如360杀毒软件.酷狗音乐都拥有最小化至任务栏并在系统托盘区留下图标,我的项目同样需要该功能.所以 ...

  3. C# 窗体最小化的托盘/系统通知区域(转)

    1.在form中添加一个NotifyIcon控件 2.把1.ico这个图标放在binDebug目录下 先看看效果图: 3.代码的实现 using System; using System.Collec ...

  4. C# Winform实现捕获窗体最小化、最大化、关闭按钮事件的方法,可通过重写WndProc来实现

    本文实例讲述了C# Winform实现捕获窗体最小化.最大化.关闭按钮事件的方法,主要是通过重写WndProc来实现的.分享给大家供大家参考.具体方法如下: 主要功能代码如下: ? 1 2 3 4 5 ...

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

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

  6. Kubuntu中thunderbird最小化到任务栏

    作为邮件客户端,如果没有办法显示在任务栏中,实在是说不过去.遗憾的是thunderbird默认真不带这个功能(因为Linux的桌面系统太混乱了?)... 当然,解决也十分简单,只要安装Firetray ...

  7. 打开计算机无法最小化,软件一打开就最小化到任务栏怎么办_电脑打开程序它就最小化的解决方法...

    最近有朋友问小编软件一打开就最小化到任务栏怎么办的问题,为什么电脑打开软件自己变成最小化呢?其实有很多朋友都遇到过软件打开直接最小化打不开了的问题,那么窗口一直最小化打不开的解决方法是什么呢?别着急, ...

  8. 窗口最小化,任务栏不显示图标的解决办法

    窗口最小化,任务栏不显示图标的解决办法 具体症状:无论打开多少个浏览器窗口或文档或者是应用程序,任务栏上面一个都不显示,只要缩小窗口后就找不到了,要想关闭只能打开任务管理器从里面关闭 解决办法: 打开 ...

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

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

最新文章

  1. 在MVC控制器里面使用dynamic和ExpandoObject,实现数据转义的输出
  2. git查找两个分支的共同节点
  3. 七月在线数据结构视频教程一
  4. oracle回收ddl权限,oracle禁止指定用户DDL操作触发器
  5. 决策树---ID3算法
  6. 安卓入门系列-04常见布局之LinearLayout(线性布局)
  7. c语言的boolean_0基础学习C语言第四章:三种基本结构
  8. 【转载记录】Accessing Device Drivers from C#
  9. jumpserver mysql跳板_jumpserver跳板机
  10. php input type='button' 颜色,HTML5 input新增type属性color颜色拾取器的实例代码
  11. CTF之做题总结(二)
  12. creo外观库_Proe/Creo外观着色与贴图
  13. 航空公司客户价值分析
  14. 不伤眼睛的文字背景色
  15. 备案有哪些类型,今天给大家讲讲备案类型概览,云南网站备案
  16. 常见 SQL 面试题:经典 50 例
  17. Oracle体系结构之内存结构(SGA、PGA)
  18. <UDP网络编程>——《计算机网络》
  19. 目标检测 IoU、GloU、DloU、CloU详解
  20. 以核心技术提升打破认知偏见:破解第三代哈弗H6的技术密码

热门文章

  1. 查询计划中集的势(Cardinality)的计算
  2. CentOS7,linux下nginx的安装过程——2.配置user,路径,openssl,make install,关闭防火墙,测试——源码
  3. [Unity优化]overdraw01:不可见遮罩
  4. 【[网络流二十四题]最长不下降子序列问题】
  5. java中将int类型数据存到数组中
  6. 【转】指针和引用的区别
  7. MOSS 2010:Visual Studio 2010开发体验(15)——LINQ to SharePoint
  8. [CSS]BlendTrans滤镜
  9. 跑monkey需要安装什么_坤秀为您解析无漆木门安装需要注意什么?
  10. thymeleaf 中文_springboot 整合 thymeleaf(上手即用)