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

本文介绍了如何使用Visual C#的NotifyIcon组件创建一个托盘程序,包括隐藏窗体、设置托盘图标、显示提示文本、添加菜单以及响应菜单事件的方法。通过设置窗体属性、定义MenuItem数组和ContextMenu对象,实现托盘程序的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

     为什么说用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程序开发语言有了施展自身功能更广阔的舞台

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值