用 C# 編寫一個停放在任務欄上的圖標程序
作者: 蔡世友 類別: C#/VB 日期: 2002-1-30 10:21:46
01-12-6 上午 10:53:11
--------------------------------------------------------------------------------
引 言
C#語言是微軟公司針對.Net平台才推出來的一門新語言,作為.Net平台的第一語言,它幾乎集中了所有關於軟件開發和軟件工程研究的最新成果。其是當前第一個完全面向組件的語言。
微軟的.Net平台堪稱為新一代的互聯網平台。對於技術開發人員來說,.Net平台的兩大特性是非常卓越的,首先是其所提供的公共語言運行時,也就是公用語言運行平台,另一方面就是其龐大而全面的統一編程類。
下面我向大家介紹一個.Net平台上用C# 寫的可以停放在任務欄上的圖標程序,類似於SQL管理器、防病毒軟件圖標及OICQ圖標等。
一、圖標程序基本概念
我們這裡所指的圖標程序是類似於在Windows中經常接觸的停放在任務欄上,在後台運行的病毒監視,SQL服務管理器等程序。這些程序啟動後形成一個圖標停在任務欄上,具有以下的外觀特征:
雙擊圖標可打開程序主窗口。
當鼠標停在圖標上時顯示提示信息。
在圖標上點擊鼠標右鍵可以彈出一個快捷菜單,通過點擊快捷菜單上的菜單項可以運行相應的程序功能。
二、程序使用類簡介
.Net提供了非常多的類,我們在開發過程中只需要使用其提供的各種類就能夠實現我們的大部份功能,.Net平台中的類有的是封裝的,有的是虛擬的,大多數的都是一般的公共類。你可以直接構造這些公共類的實例,也可以通過繼承而使用類的全部功能。在本程序中,我們使用了很多.Net類,下面,我將分別對主要的類作簡單介紹!
System.Windows.Fomrs.NotifyIcon類
這是本程序中最主要的類,其從Component類繼承的一個封裝類,不可繼承,主要功能是產生一個可以停放在任務欄最右邊的圖標程序。下面是其主要成員介紹:
構造函數(Constructor Function)
public NotifyIcon(); 不帶任何參數,直接構造一個NotifyIcon對象。
Public NotifyIcon(IContainer container); 帶一個Icontainer參數,代表NotifyIcon容器控件。
屬性(Properties)
ContextMenu 對象的彈出式菜單。
Icon 對象的圖標
Text 對象的ToolTip文本,也即是當鼠標停在對象上時顯示的文本。
Visible 表示對象是否是可見的。
事件(Events)
Clcik 當單擊對象圖標時引發。
DoubleClick 當雙擊對象圖標時引發。
System.Windows.Forms.Application類
Windows Forms應用程序啟動類,提供表態的方法管理運用程序,如啟動Windows Forms使用Application.Run(Form),而退出程序使用Application.Exit()等。
System.Windows.Forms.Form類
Windows Forms程序窗體類,視窗程序的窗體一般都是直接或間接了從該類產生,如產生一個簡單的窗體使用new Forms()即可。在一般應用程序中,由於用戶窗體上還要根據自己的需要添加更多的可視化元素及控件,如按鈕、標簽、文本框等;因此,大多數我們在使用Form類時都是從該類派生出用戶自己的窗體類。
System.Windows.Forms.Button類
按鈕控件類,提供一個可視的按鈕元素,一般情況下通過Text屬性設置按鈕的顯示文本,再為按鈕添加Click事件響應函數即可使用。
System.Windows.Forms.Label類
文字標簽類,可以通過設置其Text屬性使其在窗體上顯示一般的文字信息。
System.Windows.Forms.MenuItem類
Windows Forms菜單項類,可以生成一個簡單的菜單項,菜單項是所有菜單的基本構成元素,通過該類可以設置菜單項的外觀顯示屬性及事件響應方法等。該類提供了多種生成菜單項對象的構造函數,在實際應用中一般采用MenuItem(string Text)的方法生成一個顯示文本為Text的菜單項。菜單項類提供Click事件使得用戶點擊菜單時可以響應。
System.Windows.Forms.ContextMenu類
彈出菜單類,生成一個彈出式菜單對象。其包括了一個菜單項集合屬性,使其可以非常方便的管理及存取彈出菜單的各項。生成彈出菜單對象使用其構造函數,有兩種方法:一種是直接使用ContextMenu(),不帶任何參數。另一種是使用ContextMenu(MenuItem[] menus),代有一個菜單項數組作為參數。
三、程序設計及主要代碼
程序設計
本程序使用Visual Studio .Net編寫,首先通過新建Windows應用項目生成一個Windows Forms初始窗體,在窗體上添加一個文本為“隱藏窗體”的按鈕,及一個說明演示程序的標簽,並雙擊按鈕,在其Click事件響應方法中添加隱藏窗休的代碼。然後在工具欄面板中找到NotifyIcon控件,並把其拖到窗體上,然後設置其Text屬性及Icon屬性(Icon屬性為圖片,可以通過控件屬性欄選擇設置)。雙擊窗體為窗體的Load事件響應方法添加NotifyIcon類的初始化代碼,完成後即可直接編譯運行。如下圖所示:
程序主要代碼及注釋
下面將列出本程序中部份主要代碼及詳細注釋,以供大家加深對程序的理解。
public class Form1 : System.Windows.Forms.Form
{
//定義一個NotifyIcon對象
private System.Windows.Forms.NotifyIcon notifyIcon1;
private void InitializeComponent()//Visual Studio .Net自動產生,窗體初始化時執行
{
//創建NotifyIcon對象並設置其基本的屬性如Icon,Text及Visible等
this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
this.notifyIcon1.Text = "這是我的測試程序,還Cool吧!";
this.notifyIcon1.Visible = true;
}
static void Main()
{
Application.Run(new Form1());//啟動運行程序
}
private void Form1_Load(object sender, System.EventArgs e)
{
//生成4個菜單項對象,顯示文本分別為"顯示窗口"、"隱藏窗口"、"執行程序"、"退出程序"
MenuItem menuItem1=new MenuItem("顯示窗口");
MenuItem menuItem2=new MenuItem("隱藏窗口");
MenuItem menuItem3=new MenuItem("執行程序");
MenuItem menuItem4=new MenuItem("退出程序");
//分別為4個菜單項添加Click事件響應函數
menuItem1.Click+=new System.EventHandler(this.menuItem1_Click);
menuItem2.Click+=new System.EventHandler(this.menuItem2_Click);
menuItem3.Click+=new System.EventHandler(this.menuItem3_Click);
menuItem4.Click+=new System.EventHandler(this.menuItem4_Click);
//設置NotifyIcon對象的ContextMenu屬性為生面的彈出菜單對象
notifyIcon1.ContextMenu=new ContextMenu(new MenuItem[]{menuItem1,menuItem2,menuItem3,menuItem4});
//當用戶雙擊程序圖標時將執行相應的函數
notifyIcon1.DoubleClick+=new System.EventHandler(this.notifyIcon_DBClick);
}
private void menuItem1_Click(object sender,System.EventArgs e)//“顯示窗口”菜單的響應方法
{
if(this.Visible==false)this.Visible=true;//假如當前窗口沒顯示則顯示當前窗口
}
private void menuItem2_Click(object sender,System.EventArgs e)//"隱藏窗口"菜單的響應方法
{
if(this.Visible==true)this.Visible=false;//假如當前窗口為顯示的則隱藏窗口
}
private void menuItem3_Click(object sender,System.EventArgs e)//"執行程序"菜單的響應方法
{
//顯示一個提示信息框,表示事件已經得到響應
MessageBox.Show("演示程序已經執行,此處功能就是顯示一個提示框!","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
private void menuItem4_Click(object sender,System.EventArgs e)//“退出程序”菜單的響應方法
{
this.Close();//關閉當前對象(即窗體)
Application.Exit();//通過Application類的靜態方法Exit()退出應用程序
}
private void button1_Click(object sender, System.EventArgs e)//用戶單擊按鈕時的響應方法
{
this.Visible=false;//隱藏當前主窗口
}
private void notifyIcon_DBClick(object sender, System.EventArgs e)//用戶雙擊應用程序圖標進的響應方法
{
this.Visible=true;//顯示當前主窗口
}
}
四、程序運行
運行程序,將顯示一個主窗口,此時還可以看到在任務欄上面多了一個圖標。當鼠標移到其上停留一下時,將顯示一個簡單的提示信息,點擊窗口上的“隱藏窗口”按鈕將隱藏主窗口,如下圖所示:
在圖標上點擊鼠標右鍵將顯示一個彈出菜單,此時可以選擇相應的菜單執行相應的功能如“顯示窗口”、“隱藏窗口”、“退出程序等”,如下圖所示:
例如,在彈出的菜單中點擊“執行程序”將信息一個信息提示框,如下圖所示: