如何将Winform窗体最小化的时候将其显示到系统拖盘

    技术2022-05-19  20

      一.   托盘程序的主要步骤及解决方法:      为什么说用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成功编译后的运行界面:   |      图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程序开发语言有了施展自身功能更广阔的舞台


    最新回复(0)