分享
 
 
 

C#做托盘程序

王朝c#·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

所谓托盘程序顾名思义就是象托起的盘子一样的程序。而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以越来越多的程序设计者都把程序设计成托盘这种方式。我们已经看过了用其他语言设计托盘程序的例子,其中的大部分,整个设计过程还是相对烦琐的。而对于微软公司极力推荐的下一代程序开发语言--Visual C#来说,却可以十分方便设计出一个托盘程序。本文就是介绍Visual C#设计托盘程序的具体过程。

首先来介绍一下本文中设计托盘程序所需要的环境:

(1).微软公司视窗2000服务器版

(2)..Net FrameWork SDK Beta 2

一. 托盘程序的主要步骤及解决方法:

为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm组件中定义了一个专门用来开发托盘程序的组件--NotifyIcon组件。下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。

(1).如何在程序运行后隐藏窗体:

我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。在用Visual C#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。其中一种方法是重载主窗体中的OnActivated( )事件,OnActivated( )事件是在窗体激活的时候才触发的。通过重载此事件可以达到隐藏主窗体的目的。具体程序代码如下:

protected override void OnActivated ( EventArgs e )

{

this.Hide ( ) ;

}

另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。具体的程序代码如下:

this.MaximizeBox = false ;

this.MinimizeBox = false ;

this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;

在本文介绍的程序中,使用了第二种方法。

(2).如何为托盘程序设定显示图标:

在NotifyIcon组件中有一个属性icon就是来设定托盘图标的,由于Visual C#是一个完全的OOP (面向对象)语言,在Visual C#中任何东西都可以作为对象来处理。当然对应一个icon来说,也可以用对象的方法来处理他。我们通过下列语句来得到一个icon对象:

private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;

请注意:在编译好的程序中,必须要在同一个目录中有一个Tray.ico图标文件,否则程序运行时候会出错的。

通过下列语句把此icon对象付给NotifyIcon组件中的icon属性,此时如果程序正确编译,则此icon就会显示在工具栏中了。

TrayIcon.Icon = mNetTrayIcon ;

(3).设定当鼠标停留在托盘程序上显示的文本内容:

NotifyIcon组件中有一个属性Text。设定这个属性的内容,就是鼠标停留在托盘图标上显示的内容了。具体语句如下:

TrayIcon.Text = "用Visual C#做托盘程序" + "\n" + "作者:马金虎于2001.12.08" ;

(4).如何在托盘程序加入菜单:

在NotifyIcon组件中有一个对象叫ContextMenu,在托盘程序中显示出的菜单就是通过设定此对象来实现的。以下的程序代码是为托盘程序加入菜单项:

notifyiconMnu = new ContextMenu ( mnuItms ) ;

TrayIcon.ContextMenu = notifyiconMnu ;

//为托盘程序设定菜单

(5).如何设定ContextMenu对象的内容:

ContextMenu对象是托盘程序的菜单的结构,所以如何设定此对象,在本程序中是比较关键的。在程序中,是通过定义一个菜单项数组,并对这个数组设定不同的值(这当中包括菜单的一些属性和事件),然后把这个数组同时赋值给ContextMenu对象,来实现对ContextMenu对象的设置过程的。以下是程序中具体代码:

//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象

MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;

mnuItms [ 0 ] = new MenuItem ( ) ;

mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ;

mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ;

mnuItms [ 1 ] = new MenuItem ( "-" ) ;

mnuItms [ 2 ] = new MenuItem ( ) ;

mnuItms [ 2 ] .Text = "退出系统" ;

mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ;

mnuItms [ 2 ] .DefaultItem = true ;

notifyiconMnu = new ContextMenu ( mnuItms ) ;

TrayIcon.ContextMenu = notifyiconMnu ;

//为托盘程序加入设定好的ContextMenu对象

当成功加入了ContextMenu对象后,在程序编译完成运行时,当鼠标右键点击托盘图标,程序会自动弹出ContextMenu对象封装好的菜单。

二. 本文介绍的程序源代码( Tray.cs ):

Tray.cs源程序代码:

using System ;

using System.Drawing ;

using System.Collections ;

using System.ComponentModel ;

using System.Windows.Forms ;

using System.Data ;

//导入在程序中使用到的名称空间

public class Tray : Form

{

private System.ComponentModel.Container components = null ;

private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;

private NotifyIcon TrayIcon ;

private ContextMenu notifyiconMnu ;

public Tray()

{

//初始化窗体中使用到的组件

InitializeComponent ( ) ;

//初始化托盘程序的各个要素

Initializenotifyicon ( ) ;

}

private void Initializenotifyicon ( )

{

//设定托盘程序的各个属性

TrayIcon = new NotifyIcon ( ) ;

TrayIcon.Icon = mNetTrayIcon ;

TrayIcon.Text = "用Visual C#做托盘程序" + "\n" + "作者:马金虎于2001.12.08" ;

TrayIcon.Visible = true ;

TrayIcon.Click += new System.EventHandler ( this.click ) ;

//定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象

MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;

mnuItms [ 0 ] = new MenuItem ( ) ;

mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ;

mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ;

mnuItms [ 1 ] = new MenuItem ( "-" ) ;

mnuItms [ 2 ] = new MenuItem ( ) ;

mnuItms [ 2 ] .Text = "退出系统" ;

mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ;

mnuItms [ 2 ] .DefaultItem = true ;

notifyiconMnu = new ContextMenu ( mnuItms ) ;

TrayIcon.ContextMenu = notifyiconMnu ;

//为托盘程序加入设定好的ContextMenu对象

}

public void click ( object sender , System.EventArgs e )

{

MessageBox.Show ( "Visual C#编写托盘程序中的事件响应" ) ;

}

public void showmessage ( object sender , System.EventArgs e )

{

MessageBox.Show ( "你点击了菜单的第一个选项" ) ;

}

public void ExitSelect ( object sender , System.EventArgs e )

{

//隐藏托盘程序中的图标

TrayIcon.Visible = false ;

//关闭系统

this.Close ( ) ;

}

//清除程序中使用过的资源

public override void Dispose ( )

{

base.Dispose ( ) ;

if ( components != null )

components.Dispose ( ) ;

}

private void InitializeComponent ( )

{

this.SuspendLayout ( ) ;

this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;

this.ClientSize = new System.Drawing.Size ( 320 , 56 ) ;

this.ControlBox = false ;

this.MaximizeBox = false ;

this.MinimizeBox = false ;

this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;

this.Name = "tray" ;

this.ShowInTaskbar = false ;

this.Text = "用Visual C#做托盘程序!" ;

this.ResumeLayout ( false ) ;

}

static void Main ( )

{

Application.Run ( new Tray ( ) ) ;

}

}

三. 总结:

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有