淺談c#實現隱藏工作列表徵圖的Windows托盤程式
來源:互聯網
上載者:User
在網上看了許多人問怎麼樣實現在WINDOWS托盤程式中,當點擊最小化時將表單隱藏在工作列中,而點擊托盤欄中的程式托盤時又會顯示出表單的正常狀態的功能。許多人的思路是找到最小化時觸發的事件或者是程式最小化時執行的方法,可是怎麼也找不到。其實實現這種功能很簡單,只不過許多人的思路一直停留在找到最小化的方法體上了,以為只要在此方法體中再加上一些語句就可以實現,可是怎麼也找不到,於是就卡在這裡了。其實實現這種功能很簡單,可以通過以下方法實現:
1.加notifyicon控制項notifyIcon1,為控制項notifyIcon1的屬性Icon添加一個icon表徵圖。
2.添加表單最小化事件(在這裡實現隱藏工作列表徵圖,有兩種方法):
方法一:
// this.SizeChanged += new System.EventHandler(this.Form1_SizeChanged);
//上面一行是主表單InitializeComponent()方法中需要添加的引用
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState==FormWindowState.Minimized)
{
this.Hide();或者是this.Visible = false;
this.notifyIcon1.Visible=true;
}
}
方法二:
this.Resize += new System.EventHandler(this.Form1_Resize);
//上面一行是主表單InitializeComponent()方法中需要添加的引用
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible = false;
}
3.添加點擊表徵圖事件(實現點擊左鍵顯示主表單正常狀態):
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
4.可以給notifyIcon添加右鍵菜單:
主表單中拖入一個ContextMenu控制項contextMenu1,點中控制項,在操作功能表中添加菜單,notifyIcon1的ContextMenu行為中選中contextMenu1作為操作功能表。(可以在子功能表中添加行為)……
在這裡主要談談在第二步中的兩種方法。
這裡使用的是兩種最常規,也是最常用的辦法。第一種的SizeChanged()事件,其本意是當控制項上的Size屬性更改時引發的事件。而第二種方法Resize()事件,是在調整控制項大小時引發的事件。可在這裡為什麼都可以實現同樣的功能?可以做一下實驗看看兩個事件到底是什麼時候發生的。
private void Form1_SizeChanged(object sender, EventArgs e)
{
MessageBox.Show("sizechange即將發生");
if (this.WindowState == FormWindowState.Minimized)
this.Visible = true;
}
private void Form1_Resize(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
this.Visible = false;
MessageBox.Show("resize發生了");
}
private void notifyIcon1_Click(object sender, EventArgs e)
{
this.Visible = true;
this.WindowState = FormWindowState.Normal;
}
將這些代碼都加在同一個程式中,編譯執行可以看到。當我們手工的擴大或縮小我們的表單大小時,會彈出訊息框"resize發生了",接著就會彈出訊息框"sizechange即將發生"。從這個小例子可以看出這兩個事件其實是大同小異的,只不過Resize先執行而SizeChanged後執行罷了。從這兩個事件的MSDN解釋上我們也不難看出,當我們改變控制項大小,這時候必先觸發Resize()(在調整控制項大小時引發的事件),而我們改變了大小也必然會導致Size屬性的改變,這時又會觸發SizeChanged事件。這個先後道理我想不難理解。所以說這兩個事件是乎有著某種必然的聯絡!
最小化(最大化)其實和我們手工改變表單的大小是一個道理。而之所以能用兩種方法得到相同的效果的道理也正是如以上所述,當然就可以達到異曲同工之妙!