用 C# 编写一个停放在任务栏上的图标程序

用 C# 编写一个停放在任务栏上的图标程序 
作者: 蔡世友 类别: C#/VB 日期: 2002-1-30 10:21:46  
01-12-6 上午 10:53:11
--------------------------------------------------------------------------------
引 言 
C#语言是微软公司针对.Net平台才推出来的一门新语言,作为.Net平台的第一语言,它几乎集中了所有关于软件开发和软件工程研究的最新成果。其是当前第一个完全面向组件的语言。 
微软的.Net平台堪称为新一代的互联网平台。对于技术开发人员来说,.Net平台的两大特性是非常卓越的,首先是其所提供的公共语言运行时,也就是公用语言运行平台,另一方面就是其庞大而全面的统一编程类。 
下面我向大家介绍一个.Net平台上用C# 写的可以停放在任务栏上的图标程序,类似于SQL管理器、防病毒软件图标及OICQ图标等。 
一、图标程序基本概念 
我们这里所指的图标程序是类似于在Windows中经常接触的停放在任务栏上,在后台运行的病毒监视,SQL服务管理器等程序。这些程序启动后形成一个图标停在任务栏上,具有以下的外观特征: 
双击图标可打开程序主窗口。 
当鼠标停在图标上时显示提示信息。 
在图标上点击鼠标右键可以弹出一个快捷菜单,通过点击快捷菜单上的菜单项可以运行相应的程序功能。 
二、程序使用类简介 
.Net提供了非常多的类,我们在开发过程中只需要使用其提供的各种类就能够实现我们的大部份功能,.Net平台中的类有的是封装的,有的是虚拟的,大多数的都是一般的公共类。你可以直接构造这些公共类的实例,也可以通过继承而使用类的全部功能。在本程序中,我们使用了很多.Net类,下面,我将分别对主要的类作简单介绍! 
System.Windows.Fomrs.NotifyIcon类 
这是本程序中最主要的类,其从Component类继承的一个封装类,不可继承,主要功能是产生一个可以停放在任务栏最右边的图标程序。下面是其主要成员介绍: 
构造函数(Constructor Function) 
public NotifyIcon(); 不带任何参数,直接构造一个NotifyIcon对象。 
Public NotifyIcon(IContainer container); 带一个Icontainer参数,代表NotifyIcon容器控件。 
属性(Properties) 
ContextMenu 对象的弹出式菜单。 
Icon 对象的图标 
Text 对象的ToolTip文本,也即是当鼠标停在对象上时显示的文本。 
Visible 表示对象是否是可见的。 
事件(Events) 
Clcik 当单击对象图标时引发。 
DoubleClick 当双击对象图标时引发。 
System.Windows.Forms.Application类 
Windows Forms应用程序启动类,提供表态的方法管理运用程序,如启动Windows Forms使用Application.Run(Form),而退出程序使用Application.Exit()等。 
System.Windows.Forms.Form类 
Windows Forms程序窗体类,视窗程序的窗体一般都是直接或间接了从该类产生,如产生一个简单的窗体使用new Forms()即可。在一般应用程序中,由于用户窗体上还要根据自己的需要添加更多的可视化元素及控件,如按钮、标签、文本框等;因此,大多数我们在使用Form类时都是从该类派生出用户自己的窗体类。 
System.Windows.Forms.Button类 
按钮控件类,提供一个可视的按钮元素,一般情况下通过Text属性设置按钮的显示文本,再为按钮添加Click事件响应函数即可使用。 
System.Windows.Forms.Label类 
文字标签类,可以通过设置其Text属性使其在窗体上显示一般的文字信息。 
System.Windows.Forms.MenuItem类 
Windows Forms菜单项类,可以生成一个简单的菜单项,菜单项是所有菜单的基本构成元素,通过该类可以设置菜单项的外观显示属性及事件响应方法等。该类提供了多种生成菜单项对象的构造函数,在实际应用中一般采用MenuItem(string Text)的方法生成一个显示文本为Text的菜单项。菜单项类提供Click事件使得用户点击菜单时可以响应。 
System.Windows.Forms.ContextMenu类 
弹出菜单类,生成一个弹出式菜单对象。其包括了一个菜单项集合属性,使其可以非常方便的管理及存取弹出菜单的各项。生成弹出菜单对象使用其构造函数,有两种方法:一种是直接使用ContextMenu(),不带任何参数。另一种是使用ContextMenu(MenuItem[] menus),代有一个菜单项数组作为参数。 
三、程序设计及主要代码 
程序设计 
本程序使用Visual Studio .Net编写,首先通过新建Windows应用项目生成一个Windows Forms初始窗体,在窗体上添加一个文本为“隐藏窗体”的按钮,及一个说明演示程序的标签,并双击按钮,在其Click事件响应方法中添加隐藏窗休的代码。然后在工具栏面板中找到NotifyIcon控件,并把其拖到窗体上,然后设置其Text属性及Icon属性(Icon属性为图片,可以通过控件属性栏选择设置)。双击窗体为窗体的Load事件响应方法添加NotifyIcon类的初始化代码,完成后即可直接编译运行。如下图所示: 
程序主要代码及注释 
下面将列出本程序中部份主要代码及详细注释,以供大家加深对程序的理解。 
public class Form1 : System.Windows.Forms.Form 

//定义一个NotifyIcon对象 
private System.Windows.Forms.NotifyIcon notifyIcon1; 
private void InitializeComponent()//Visual Studio .Net自动产生,窗体初始化时执行 

//创建NotifyIcon对象并设置其基本的属性如Icon,Text及Visible等 
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); 
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); 
this.notifyIcon1.Text = "这是我的测试程序,还Cool吧!"; 
this.notifyIcon1.Visible = true; 

static void Main() 

Application.Run(new Form1());//启动运行程序 

private void Form1_Load(object sender, System.EventArgs e) 

//生成4个菜单项对象,显示文本分别为"显示窗口"、"隐藏窗口"、"执行程序"、"退出程序" 
MenuItem menuItem1=new MenuItem("显示窗口"); 
MenuItem menuItem2=new MenuItem("隐藏窗口"); 
MenuItem menuItem3=new MenuItem("执行程序"); 
MenuItem menuItem4=new MenuItem("退出程序"); 
//分别为4个菜单项添加Click事件响应函数 
menuItem1.Click+=new System.EventHandler(this.menuItem1_Click); 
menuItem2.Click+=new System.EventHandler(this.menuItem2_Click); 
menuItem3.Click+=new System.EventHandler(this.menuItem3_Click); 
menuItem4.Click+=new System.EventHandler(this.menuItem4_Click); 
//设置NotifyIcon对象的ContextMenu属性为生面的弹出菜单对象 
notifyIcon1.ContextMenu=new ContextMenu(new MenuItem[]{menuItem1,menuItem2,menuItem3,menuItem4}); 
//当用户双击程序图标时将执行相应的函数 
notifyIcon1.DoubleClick+=new System.EventHandler(this.notifyIcon_DBClick); 

private void menuItem1_Click(object sender,System.EventArgs e)//“显示窗口”菜单的响应方法 

if(this.Visible==false)this.Visible=true;//假如当前窗口没显示则显示当前窗口 

private void menuItem2_Click(object sender,System.EventArgs e)//"隐藏窗口"菜单的响应方法 

if(this.Visible==true)this.Visible=false;//假如当前窗口为显示的则隐藏窗口 

private void menuItem3_Click(object sender,System.EventArgs e)//"执行程序"菜单的响应方法 

//显示一个提示信息框,表示事件已经得到响应 
MessageBox.Show("演示程序已经执行,此处功能就是显示一个提示框!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information); 

private void menuItem4_Click(object sender,System.EventArgs e)//“退出程序”菜单的响应方法 

this.Close();//关闭当前对象(即窗体) 
Application.Exit();//通过Application类的静态方法Exit()退出应用程序 

private void button1_Click(object sender, System.EventArgs e)//用户单击按钮时的响应方法 

this.Visible=false;//隐藏当前主窗口 

private void notifyIcon_DBClick(object sender, System.EventArgs e)//用户双击应用程序图标进的响应方法 

this.Visible=true;//显示当前主窗口 


四、程序运行 
运行程序,将显示一个主窗口,此时还可以看到在任务栏上面多了一个图标。当鼠标移到其上停留一下时,将显示一个简单的提示信息,点击窗口上的“隐藏窗口”按钮将隐藏主窗口,如下图所示: 
在图标上点击鼠标右键将显示一个弹出菜单,此时可以选择相应的菜单执行相应的功能如“显示窗口”、“隐藏窗口”、“退出程序等”,如下图所示: 
例如,在弹出的菜单中点击“执行程序”将信息一个信息提示框,如下图所示:

(0)

相关推荐

  • C#程序最小化到托盘图标操作步骤与实现代码

    复制代码 代码如下: // this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged); //上面一行是主窗体InitializeComponent()方法中需要添加的引用 private void Form1_SizeChanged(object sender, EventArgs e) { if (this.WindowState==FormWindowState.Minimized) { this.Hide();

  • c# 托盘双击不触发单击事件的实现方法

    我想到了如下方法,即创建一个Timer控件(以下名为timer_singleclick),一旦单击发生,就自动启动Timer的Tick事件(timer_singleclick_Tick(object sender, EventArgs e)),一定时间后,若没有第二次点击发生,则执行单击事件(Operate_DoubleClick()),若在这段时间有双击事件(notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e))发生,则停止

  • C#实现带消息数的App图标

    上次写了一篇博文,但是每次更新图标时,桌面会闪烁(刷新)http://www.jb51.net/article/73350.htm,有博友说人家的图标都不会刷新,还能动画.我想了一下,如果要达到这个效果,可以用Form来实现,就是在Form中嵌入一个图片,然后用一个label来动态显示消息数,关键是将Form的边框隐藏,背景设为透明即可.如果要有旋转或者缩放动画,都可以用C#来实现. using System; using System.Collections.Generic; using Sy

  • C# WinForm窗口最小化到系统托盘

    1.设置WinForm窗体属性showinTask=false 2.加notifyicon控件notifyIcon1,为控件notifyIcon1的属性Icon添加一个icon图标. 3.添加窗体最小化事件(首先需要添加事件引用): 复制代码 代码如下: this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged); //上面一行是主窗体InitializeComponent()方法中需要添加的引用 private voi

  • C#实现位图转换成图标的方法

    本文实例讲述了C#实现位图转换成图标的方法.分享给大家供大家参考.具体实现方法如下: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication2 { public par

  • C#实现托盘程序并禁止多个应用实例运行的方法

    本文实例讲述了C#实现托盘程序并禁止多个应用实例运行的方法.分享给大家供大家参考,具体如下: 托盘程序的制作: 1.把NotifyIcon控件拉一个到窗体上,并设置NotifyIcon的Icon(很重要!否则运行后看不到效果) 2.窗体关闭时,将程序最小化到系统托盘上 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //MessageBox.Show("程序将最小化到系统托盘区"); e.C

  • C#怎样才能实现窗体最小化到托盘呢?

    private void Form1_Resize(object sender, System.EventArgs e) {     if (this.WindowState == FormWindowState.Minimized) {         this.Visible = false;         this.notifyIcon1.Visible = true;     } } private void notifyIcon1_Click(object sender, Syste

  • C#实现用户自定义控件中嵌入自己的图标

    本文实例讲述了C#实现用户自定义控件中嵌入自己的图标.分享给大家供大家参考,具体如下: 下面给出一下具体的步骤. 1. 新建一个用户控件 2. 向资源文件是添加一张图片,图片格式可以是bm,ico 大小最好是 16 * 16 啦! 3. 选中用户控件图标,单击"右键>属性"把 "生成操作 的属性值改为:嵌入的资源(Action Resource) 4. 第四步: [ToolboxBitmap(typeof(CutPitureNew_WPF), "CutPitu

  • C#实现WinForm禁止最大化、最小化、双击标题栏、双击图标等操作的方法

    本文实例讲述了C#实现WinForm禁止最大化.最小化.双击标题栏.双击图标等操作的方法.分享给大家供大家参考.具体实现方法如下: protected override void WndProc(ref Message m) { if (m.Msg==0x112) { switch ((int) m.WParam) { //禁止双击标题栏关闭窗体 case 0xF063: case 0xF093: m.WParam = IntPtr.Zero; break; //禁止拖拽标题栏还原窗体 case

  • C#中如何获取文件图标

    本文给大家介绍如何去获取一个文件的关联图标呢?现总结如下: 首先明确问题:获取一个文件的关联图标或者是某个类型文件的显示图标. 在网上搜了一圈,发现方法还是比较多的,但是应用C#进行获取的方法不多.我选择一种用.Net库的方法. 使用的类: System.Drawing.Icon ,位于System.Drawing 命名空间. 具体方法: System.Drawing.Icon 类中的静态方法:public static Icon ExtractAssociatedIcon(string fil

  • C#实现闪动托盘图标效果的方法

    本文实例讲述了C#实现闪动托盘图标效果的方法.分享给大家供大家参考,具体如下: 在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务. 闪动图标可以使用定时切换托盘图标的方式实现,托盘图标可以从ImageList控件中获取.在ImageList控件里面添加三个icon,第一个icon表示窗体启动以后的托盘图标.第二个和第三个图标分别表示当特定的任务发生的时候,定时切换的图标. (1)设置托盘的图标可以从ImageList控件中的Image对象

  • C#禁用双击窗体图标关闭窗体的方法

    本文实例讲述了C#禁用双击窗体图标关闭窗体的方法.分享给大家供大家参考.具体实现方法如下: [DllImport("user32.dll")] private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); protected override void WndProc(ref Message m) { if (m.Msg == 0x112) { if (m.WParam.ToInt32() == 61539

  • C#实现系统托盘通知的方法

    本文实例讲述了C#实现系统托盘通知的方法.分享给大家供大家参考.具体实现方法如下: namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { this.Activate(); } private void Form1_Resiz

随机推荐