1. 程式人生 > >C# 開發系統托盤程式

C# 開發系統托盤程式

 所謂托盤程式顧名思義就是象托起的盤子一樣的程式。而所謂的托起的盤子就是程式執行中顯示出的圖示,而托起的位置就是視窗系統的的工具欄了。托盤程式具有直觀、佔用螢幕空間較小並且可以為它定義多個功能選單,這就給操作者帶來了方便,所以越來越多的程式設計者都把程式設計成托盤這種方式。我們已經看過了用其他語言設計托盤程式的例子,其中的大部分,整個設計過程還是相對煩瑣的。而對於微軟公司極力推薦的下一代程式開發語言--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#做托盤程式" + " " + "作者:XXX" ;

(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#做托盤程式" + " " + "作者:XXX" ;
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程式開發語言有了施展自身功能更廣闊的舞臺。