如何实现C#托盘程序

所谓托盘程序顾名思义就是象托起的盘子一样的程序。而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以越来越多的程序设计者都把程序设计成托盘这种方式。我们已经看过了用其他语言设计托盘程序的例子,其中的大部分,整个设计过程还是相对烦琐的。而对于微软公司极力推荐的下一代程序开发语言--VisualC#来说,却可以十分方便设计出一个托盘程序。本文就是介绍VisualC#设计托盘程序的具体过程。
None.gif
None.gif  首先来介绍一下本文中设计托盘程序所需要的环境:
None.gif
None.gif  (
1).微软公司视窗2000服务器版
None.gif
None.gif  (
2)..NetFrameWorkSDKBeta2
None.gif
None.gif  一.托盘程序的主要步骤及解决方法:
None.gif
None.gif  为什么说用VisualC#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包(.NetFrameWorkSDK)中的WinForm组件中定义了一个专门用来开发托盘程序的组件
--NotifyIcon组件。下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。
None.gif
None.gif  (
1).如何在程序运行后隐藏窗体:
None.gif
None.gif  我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。在用VisualC#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。其中一种方法是重载主窗体中的OnActivated()事件,OnActivated()事件是在窗体激活的时候才触发的。通过重载此事件可以达到隐藏主窗体的目的。具体程序代码如下:
None.gif
None.gif
protectedoverridevoidOnActivated(EventArgse)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif
this.Hide();
ExpandedBlockEnd.gif}

None.gif
None.gif  另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。具体的程序代码如下:
None.gif
None.gif
this.MaximizeBox=false;
None.gif
this.MinimizeBox=false;
None.gif
this.WindowState=System.Windows.Forms.FormWindowState.Minimized;
None.gif
None.gif  在本文介绍的程序中,使用了第二种方法。
None.gif
2).如何为托盘程序设定显示图标:
None.gif
None.gif  在NotifyIcon组件中有一个属性icon就是来设定托盘图标的,由于VisualC#是一个完全的OOP(面向对象)语言,在VisualC#中任何东西都可以作为对象来处理。当然对应一个icon来说,也可以用对象的方法来处理他。我们通过下列语句来得到一个icon对象:
None.gif
None.gif
privateIconmNetTrayIcon=newIcon("Tray.ico");
None.gif
None.gif  请注意:在编译好的程序中,必须要在同一个目录中有一个Tray.ico图标文件,否则程序运行时候会出错的。
None.gif
None.gif  通过下列语句把此icon对象付给NotifyIcon组件中的icon属性,此时如果程序正确编译,则此icon就会显示在工具栏中了。
None.gif
None.gifTrayIcon.Icon
=mNetTrayIcon;
None.gif
None.gif  (
3).设定当鼠标停留在托盘程序上显示的文本内容:
None.gif
None.gif  NotifyIcon组件中有一个属性Text。设定这个属性的内容,就是鼠标停留在托盘图标上显示的内容了。具体语句如下:
None.gif
None.gifTrayIcon.Text
="用VisualC#做托盘程序"+"/n"+"作者:马金虎于2001.12.08";
None.gif
None.gif  (
4).如何在托盘程序加入菜单:
None.gif
None.gif  在NotifyIcon组件中有一个对象叫ContextMenu,在托盘程序中显示出的菜单就是通过设定此对象来实现的。以下的程序代码是为托盘程序加入菜单项:
None.gif
None.gifnotifyiconMnu
=newContextMenu(mnuItms);
None.gifTrayIcon.ContextMenu
=notifyiconMnu;
None.gif
//为托盘程序设定菜单
None.gif

None.gif  (
5).如何设定ContextMenu对象的内容:
None.gif
None.gif  ContextMenu对象是托盘程序的菜单的结构,所以如何设定此对象,在本程序中是比较关键的。在程序中,是通过定义一个菜单项数组,并对这个数组设定不同的值(这当中包括菜单的一些属性和事件),然后把这个数组同时赋值给ContextMenu对象,来实现对ContextMenu对象的设置过程的。以下是程序中具体代码:
None.gif
None.gif
//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
None.gif
MenuItem[]mnuItms=newMenuItem[3];
None.gifmnuItms[
0]=newMenuItem();
None.gifmnuItms[
0].Text="用VisualC#做托盘程序!";
None.gifmnuItms[
0].Click+=newSystem.EventHandler(this.showmessage);
None.gif
None.gifmnuItms[
1]=newMenuItem("-");
None.gifmnuItms[
2]=newMenuItem();
None.gifmnuItms[
2].Text="退出系统";
None.gifmnuItms[
2].Click+=newSystem.EventHandler(this.ExitSelect);
None.gifmnuItms[
2].DefaultItem=true;
None.gif
None.gifnotifyiconMnu
=newContextMenu(mnuItms);
None.gifTrayIcon.ContextMenu
=notifyiconMnu;
None.gif
//为托盘程序加入设定好的ContextMenu对象
None.gif

None.gif  当成功加入了ContextMenu对象后,在程序编译完成运行时,当鼠标右键点击托盘图标,程序会自动弹出ContextMenu对象封装好的菜单。
None.gif二.本文介绍的程序源代码(Tray.cs)和编译后程序运行界面:
None.gif
None.gif下图时Tray.cs成功编译后的运行界面:
None.gif
None.gif
None.gif  图01:程序运行界面
None.gif
None.gif  Tray.cs源程序代码:
None.gif
None.gif
usingSystem;
None.gif
usingSystem.Drawing;
None.gif
usingSystem.Collections;
None.gif
usingSystem.ComponentModel;
None.gif
usingSystem.Windows.Forms;
None.gif
usingSystem.Data;
None.gif
//导入在程序中使用到的名称空间
None.gif
publicclassTray:Form
ExpandedBlockStart.gifContractedBlock.gif
dot.gif{
InBlock.gif 
privateSystem.ComponentModel.Containercomponents=null;
InBlock.gif 
privateIconmNetTrayIcon=newIcon("Tray.ico");
InBlock.gif 
privateNotifyIconTrayIcon;
InBlock.gif 
privateContextMenunotifyiconMnu;
InBlock.gif
InBlock.gif 
publicTray()
ExpandedSubBlockStart.gifContractedSubBlock.gif 
dot.gif{
InBlock.gif  
//初始化窗体中使用到的组件
InBlock.gif
  InitializeComponent();
InBlock.gif  
//初始化托盘程序的各个要素
InBlock.gif
  Initializenotifyicon();
ExpandedSubBlockEnd.gif }

InBlock.gif
InBlock.gif
privatevoidInitializenotifyicon()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif 
//设定托盘程序的各个属性
InBlock.gif
 TrayIcon=newNotifyIcon();
InBlock.gif TrayIcon.Icon
=mNetTrayIcon;
InBlock.gif TrayIcon.Text
="用VisualC#做托盘程序"+"/n"+"作者:马金虎于2001.12.08";
InBlock.gif TrayIcon.Visible
=true;
InBlock.gif TrayIcon.Click
+=newSystem.EventHandler(this.click);
InBlock.gif
InBlock.gif 
//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象
InBlock.gif
 MenuItem[]mnuItms=newMenuItem[3];
InBlock.gif mnuItms[
0]=newMenuItem();
InBlock.gif mnuItms[
0].Text="用VisualC#做托盘程序!";
InBlock.gif mnuItms[
0].Click+=newSystem.EventHandler(this.showmessage);
InBlock.gif
InBlock.gif mnuItms[
1]=newMenuItem("-");
InBlock.gif
InBlock.gif mnuItms[
2]=newMenuItem();
InBlock.gif mnuItms[
2].Text="退出系统";
InBlock.gif mnuItms[
2].Click+=newSystem.EventHandler(this.ExitSelect);
InBlock.gif mnuItms[
2].DefaultItem=true;
InBlock.gif
InBlock.gif notifyiconMnu
=newContextMenu(mnuItms);
InBlock.gif TrayIcon.ContextMenu
=notifyiconMnu;
InBlock.gif 
//为托盘程序加入设定好的ContextMenu对象
ExpandedSubBlockEnd.gif
}

InBlock.gif
publicvoidclick(objectsender,System.EventArgse)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif MessageBox.Show(
"VisualC#编写托盘程序中的事件响应");
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
publicvoidshowmessage(objectsender,System.EventArgse)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif MessageBox.Show(
"你点击了菜单的第一个选项");
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
publicvoidExitSelect(objectsender,System.EventArgse)
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif 
//隐藏托盘程序中的图标
InBlock.gif
 TrayIcon.Visible=false;
InBlock.gif 
//关闭系统
InBlock.gif
 this.Close();
ExpandedSubBlockEnd.gif}

InBlock.gif
//清除程序中使用过的资源
InBlock.gif
publicoverridevoidDispose()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif 
base.Dispose();
InBlock.gif 
if(components!=null)
InBlock.gif  components.Dispose();
ExpandedSubBlockEnd.gif}

InBlock.gif
InBlock.gif
privatevoidInitializeComponent()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif 
this.SuspendLayout();
InBlock.gif 
this.AutoScaleBaseSize=newSystem.Drawing.Size(5,13);
InBlock.gif 
this.ClientSize=newSystem.Drawing.Size(320,56);
InBlock.gif 
this.ControlBox=false;
InBlock.gif 
this.MaximizeBox=false;
InBlock.gif 
this.MinimizeBox=false;
InBlock.gif 
this.WindowState=System.Windows.Forms.FormWindowState.Minimized;
InBlock.gif
InBlock.gif 
this.Name="tray";
InBlock.gif 
this.ShowInTaskbar=false;
InBlock.gif 
this.Text="用VisualC#做托盘程序!";
InBlock.gif 
this.ResumeLayout(false);
InBlock.gif
ExpandedSubBlockEnd.gif}

InBlock.gif
staticvoidMain()
ExpandedSubBlockStart.gifContractedSubBlock.gif
dot.gif{
InBlock.gif Application.Run(
newTray());
ExpandedSubBlockEnd.gif}

ExpandedBlockEnd.gif}

None.gif
None.gif  三.总结:
None.gif
None.gif  通过以上介绍,可以看出用VisualC#做一个托盘程序并不是一件复杂的事情,而是一件比较轻松的事情。同样也可使我们明白,VisualC#虽然是一种功能强大的程序设计语言,但它只是一个打开.NetFrameWorkSDK的钥匙,正是这个内容丰富的软件包,才使得各个.Net程序开发语言有了施展自身功能更广阔的舞台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值