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

  1. 为什么说用Visual C#可以十分方便的做一个托盘程序,主要的原因是在.Net框架的软件开发包( .Net FrameWork SDK )中的WinForm组件中定义了一个专门用来开发托盘程序的组件--NotifyIcon组件。下面就来介绍一下这个组件的具体用法和程序设计中的主要的技巧。       
  2.      
  3.   (1).如何在程序运行后隐藏窗体:       
  4.      
  5.   我们知道托盘程序运行后是无法看见主窗体的,他只会显示在工具栏上。在用Visual C#设计此类程序的时候,可以用二种方法使得程序运行后不显示主窗体。其中一种方法是重载主窗体中的OnActivated( )事件,OnActivated( )事件是在窗体激活的时候才触发的。通过重载此事件可以达到隐藏主窗体的目的。具体程序代码如下:       
  6.      
  7. protected override void OnActivated ( EventArgs e )       
  8. {       
  9. this.Hide ( ) ;       
  10. }       
  11.      
  12.   另外一种方法是在初始化主窗体的时候完成的,通过设定主窗体的属性来达到不显示的目的。具体的程序代码如下:       
  13.      
  14. this.MaximizeBox = false ;       
  15. this.MinimizeBox = false ;       
  16. this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;       
  17.      
  18.   在本文介绍的程序中,使用了第二种方法。       
  19. (2).如何为托盘程序设定显示图标:       
  20.      
  21.   在NotifyIcon组件中有一个属性icon就是来设定托盘图标的,由于Visual C#是一个完全的OOP (面向对象)语言,在Visual C#中任何东西都可以作为对象来处理。当然对应一个icon来说,也可以用对象的方法来处理他。我们通过下列语句来得到一个icon对象:       
  22.      
  23. private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;       
  24.      
  25.   请注意:在编译好的程序中,必须要在同一个目录中有一个Tray.ico图标文件,否则程序运行时候会出错的。       
  26.      
  27.   通过下列语句把此icon对象付给NotifyIcon组件中的icon属性,此时如果程序正确编译,则此icon就会显示在工具栏中了。       
  28.      
  29. TrayIcon.Icon = mNetTrayIcon ;       
  30.      
  31.   (3).设定当鼠标停留在托盘程序上显示的文本内容:       
  32.      
  33.   NotifyIcon组件中有一个属性Text。设定这个属性的内容,就是鼠标停留在托盘图标上显示的内容了。具体语句如下:       
  34.      
  35. TrayIcon.Text = "用Visual C#做托盘程序" + "n" + "作者:马金虎于2001.12.08" ;       
  36.      
  37.   (4).如何在托盘程序加入菜单:       
  38.      
  39.   在NotifyIcon组件中有一个对象叫ContextMenu,在托盘程序中显示出的菜单就是通过设定此对象来实现的。以下的程序代码是为托盘程序加入菜单项:       
  40.      
  41. notifyiconMnu = new ContextMenu ( mnuItms ) ;       
  42. TrayIcon.ContextMenu = notifyiconMnu ;       
  43. //为托盘程序设定菜单       
  44.      
  45.   (5).如何设定ContextMenu对象的内容:       
  46.      
  47.   ContextMenu对象是托盘程序的菜单的结构,所以如何设定此对象,在本程序中是比较关键的。在程序中,是通过定义一个菜单项数组,并对这个数组设定不同的值(这当中包括菜单的一些属性和事件),然后把这个数组同时赋值给ContextMenu对象,来实现对ContextMenu对象的设置过程的。以下是程序中具体代码:       
  48.      
  49. //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象       
  50. MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;       
  51. mnuItms [ 0 ] = new MenuItem ( ) ;       
  52. mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ;       
  53. mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ;       
  54.      
  55. mnuItms [ 1 ] = new MenuItem ( "-" ) ;       
  56. mnuItms [ 2 ] = new MenuItem ( ) ;       
  57. mnuItms [ 2 ] .Text = "退出系统" ;       
  58. mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ;       
  59. mnuItms [ 2 ] .DefaultItem = true ;       
  60.      
  61. notifyiconMnu = new ContextMenu ( mnuItms ) ;       
  62. TrayIcon.ContextMenu = notifyiconMnu ;       
  63. //为托盘程序加入设定好的ContextMenu对象       
  64.      
  65.   当成功加入了ContextMenu对象后,在程序编译完成运行时,当鼠标右键点击托盘图标,程序会自动弹出ContextMenu对象封装好的菜单。       
  66.      
  67.   二. 本文介绍的程序源代码( Tray.cs ):       
  68. Tray.cs源程序代码:       
  69.      
  70. using System ;       
  71. using System.Drawing ;       
  72. using System.Collections ;       
  73. using System.ComponentModel ;       
  74. using System.Windows.Forms ;       
  75. using System.Data ;       
  76. //导入在程序中使用到的名称空间       
  77. public class Tray : Form       
  78. {       
  79.  private System.ComponentModel.Container components = null ;       
  80.  private Icon mNetTrayIcon = new Icon ( "Tray.ico" ) ;       
  81.  private NotifyIcon TrayIcon ;       
  82.  private ContextMenu notifyiconMnu ;       
  83.      
  84.  public Tray()       
  85.  {       
  86.   //初始化窗体中使用到的组件       
  87.   InitializeComponent ( ) ;       
  88.   //初始化托盘程序的各个要素       
  89.   Initializenotifyicon ( ) ;       
  90.  }       
  91.      
  92. private void Initializenotifyicon ( )       
  93. {       
  94.  //设定托盘程序的各个属性       
  95.  TrayIcon = new NotifyIcon ( ) ;       
  96.  TrayIcon.Icon = mNetTrayIcon ;       
  97.  TrayIcon.Text = "用Visual C#做托盘程序" + "n" + "作者:马金虎于2001.12.08" ;       
  98.  TrayIcon.Visible = true ;       
  99.  TrayIcon.Click += new System.EventHandler ( this.click ) ;       
  100.      
  101.  //定义一个MenuItem数组,并把此数组同时赋值给ContextMenu对象       
  102.  MenuItem [ ] mnuItms = new MenuItem [ 3 ] ;       
  103.  mnuItms [ 0 ] = new MenuItem ( ) ;       
  104.  mnuItms [ 0 ] .Text = "用Visual C#做托盘程序!" ;       
  105.  mnuItms [ 0 ] .Click += new System.EventHandler ( this.showmessage ) ;       
  106.      
  107.  mnuItms [ 1 ] = new MenuItem ( "-" ) ;       
  108.      
  109.  mnuItms [ 2 ] = new MenuItem ( ) ;       
  110.  mnuItms [ 2 ] .Text = "退出系统" ;       
  111.  mnuItms [ 2 ] .Click += new System.EventHandler ( this.ExitSelect ) ;       
  112.  mnuItms [ 2 ] .DefaultItem = true ;       
  113.      
  114.  notifyiconMnu = new ContextMenu ( mnuItms ) ;       
  115.  TrayIcon.ContextMenu = notifyiconMnu ;       
  116.  //为托盘程序加入设定好的ContextMenu对象       
  117. }       
  118. public void click ( object sender , System.EventArgs e )       
  119. {       
  120.  MessageBox.Show ( "Visual C#编写托盘程序中的事件响应" ) ;       
  121. }       
  122.      
  123. public void showmessage ( object sender , System.EventArgs e )       
  124. {       
  125.  MessageBox.Show ( "你点击了菜单的第一个选项" ) ;       
  126. }       
  127.      
  128. public void ExitSelect ( object sender , System.EventArgs e )       
  129. {       
  130.  //隐藏托盘程序中的图标       
  131.  TrayIcon.Visible = false ;       
  132.  //关闭系统       
  133.  this.Close ( ) ;       
  134. }       
  135. //清除程序中使用过的资源       
  136. public override void Dispose ( )       
  137. {       
  138.  base.Dispose ( ) ;       
  139.  if ( components != null )       
  140.   components.Dispose ( ) ;       
  141. }       
  142.      
  143. private void InitializeComponent ( )       
  144. {       
  145.  this.SuspendLayout ( ) ;       
  146.  this.AutoScaleBaseSize = new System.Drawing.Size ( 5 , 13 ) ;       
  147.  this.ClientSize = new System.Drawing.Size ( 320 , 56 ) ;       
  148.  this.ControlBox = false ;       
  149.  this.MaximizeBox = false ;       
  150.  this.MinimizeBox = false ;       
  151.  this.WindowState = System.Windows.Forms.FormWindowState.Minimized ;       
  152.      
  153.  this.Name = "tray" ;       
  154.  this.ShowInTaskbar = false ;       
  155.  this.Text = "用Visual C#做托盘程序!" ;       
  156.  this.ResumeLayout ( false ) ;       
  157.      
  158. }       
  159. static void Main ( )       
  160. {       
  161.  Application.Run ( new Tray ( ) ) ;       
  162. }       
  163. }       
  164.      
  165.   三. 总结:       
  166.      
  167.   通过以上介绍,可以看出用Visual C#做一个托盘程序并不是一件复杂的事情,而是一件比较轻松的事情。同样也可使我们明白,Visual C#虽然是一种功能强大的程序设计语言,但它只是一个打开.Net FrameWork SDK的钥匙,正是这个内容丰富的软件包,才使得各个.Net程序开发语言有了施展自身功能更广阔的舞台。   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值