首页 > 开发 > 综合 > 正文

C#做托盘程序

2024-07-21 02:19:20
字体:
来源:转载
供稿:网友

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


商业源码热门下载www.html.org.cn

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表