所谓托盘程序顾名思义就是象托起的盘子一样的程序。而所谓的托起的盘子就是程序运行中显示出的图标,而托起的位置就是视窗系统的的工具栏了。托盘程序具有直观、占用屏幕空间较小并且可以为它定义多个功能菜单,这就给操作者带来了方便,所以越来越多的程序设计者都把程序设计成托盘这种方式。我们已经看过了用其他语言设计托盘程序的例子,其中的大部分,整个设计过程还是相对烦琐的。而对于微软公司极力推荐的下一代程序开发语言
--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( ) 事件是在窗体激活的时候才触发的。通过重载此事件可以达到隐藏主窗体的目的。具体程序代码如下:
另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。具体的程序代码如下:
在本文介绍的程序中,使用了第二种方法。
请注意:在编译好的程序中,必须要在同一个目录中有一个 Tray.ico 图标文件,否则程序运行时候会出错的。
通过下列语句把此 icon 对象付给 NotifyIcon 组件中的 icon 属性,此时如果程序正确编译,则此 icon 就会显示在工具栏中了。
( 3 ) . 设定当鼠标停留在托盘程序上显示的文本内容:
NotifyIcon 组件中有一个属性 Text 。设定这个属性的内容,就是鼠标停留在托盘图标上显示的内容了。具体语句如下:
( 4 ) . 如何在托盘程序加入菜单:
在 NotifyIcon 组件中有一个对象叫 ContextMenu ,在托盘程序中显示出的菜单就是通过设定此对象来实现的。以下的程序代码是为托盘程序加入菜单项:
( 5 ) . 如何设定 ContextMenu 对象的内容:
ContextMenu 对象是托盘程序的菜单的结构,所以如何设定此对象,在本程序中是比较关键的。在程序中,是通过定义一个菜单项数组,并对这个数组设定不同的值 ( 这当中包括菜单的一些属性和事件 ) ,然后把这个数组同时赋值给 ContextMenu 对象,来实现对 ContextMenu 对象的设置过程的。以下是程序中具体代码:
当成功加入了 ContextMenu 对象后,在程序编译完成运行时,当鼠标右键点击托盘图标,程序会自动弹出 ContextMenu 对象封装好的菜单。
Tray.cs 源程序代码:
三. 总结:
通过以上介绍,可以看出用 Visual C# 做一个托盘程序并不是一件复杂的事情,而是一件比较轻松的事情。同样也可使我们明白, Visual C# 虽然是一种功能强大的程序设计语言,但它只是一个打开 .Net FrameWork SDK 的钥匙,正是这个内容丰富的软件包,才使得各个 .Net 程序开发语言有了施展自身功能更广阔的舞台。
首先来介绍一下本文中设计托盘程序所需要的环境:
( 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 对象:
在 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 成功编译后的运行界面:
下图时 Tray.cs 成功编译后的运行界面:
图 01 :程序运行界面 |
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 程序开发语言有了施展自身功能更广阔的舞台。