用Visual C#做托盘程序

2016-02-19 17:09 2 1 收藏

人生本是一个不断学习的过程,在这个过程中,图老师就是你们的好帮手,下面分享的用Visual C#做托盘程序懂设计的网友们快点来了解吧!

【 tulaoshi.com - 编程语言 】

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  (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 ( ) ) ;}}

  三. 总结:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  通过以上介绍,可以看出用Visual C#做一个托盘程序并不是一件复杂的事情,而是一件比较轻松的事情。同样也可使我们明白,Visual C#虽然是一种功能强大的程序设计语言,但它只是一个打开.Net FrameWork SDK的钥匙,正是这个内容丰富的软件包,才使得各个.Net程序开发语言有了施展自身功能更广阔的舞台。

来源:http://www.tulaoshi.com/n/20160219/1614387.html

延伸阅读
获取文件的版本信息: FileVersionInfo myFileVersionInfo1 = FileVersionInfo.GetVersionInfo("D:\\TEST.DLL"); textBox1.Text="版本号: " + myFileVersionInfo1.FileVersion; 更改文件属性,删除只读文件: 下例欲将E:\test.txt文件拷贝至D:\tmp\test.txt,但D:\tmp\test.txt已经存在。 //File.Copy(sourceFile,destinationFile,tr...
许多软件都有自动关机功能,特别是在长时间下载的时候,这个功能可是使你不用以守候在计算机前面,而电脑却能按照您事先的设定自动关闭。现在我们用visual C#来编写一个多功能的关机程序。该程序具有:定时关机、倒计时关机、关机提醒、系统信息获取等四项功能, 可设定关机时间精确到秒。并且让你很快掌握Visual C#中对API的操作程序。 一. ...
1.首先引入System.Runtime.InteropServices   using System.Runtime.InteropServices; 2.在类内部声明两个API函数,它们的位置和类的成员变量等同.   [System.Runtime.InteropServices.DllImport("user32.dll")] //申明API函数 public static extern bool RegisterHotKey( IntPtr hWnd, // handle to wind...
在网络环境下,我们最感兴趣的两个命名空间是System.Net和System.Net.Sockets。System.Net命名空间通常与较高程的操作有关,例如download或upload,试用HTTP和其他协议进行Web请求等等,而System.Net.Sockets命名空间所包含的类通常与较低程的操作有关。如果要直接使用Sockets或者TCP/IP之类的协议,这个命名空间的类是非常有用的。 ...
Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从...

经验教程

929

收藏

86
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部