在vb6.0中,我們想要在把我們的程序以一個(gè)小圖標(biāo)顯示在Windows桌面的應(yīng)用程序托盤區(qū)(即任務(wù)欄的狀態(tài)通知區(qū)域,以下都稱系統(tǒng)托盤區(qū)),需要使用到復(fù)雜難懂的API函數(shù)來完成,而且在測(cè)試的時(shí)候還經(jīng)常導(dǎo)致應(yīng)用程序崩潰。現(xiàn)在用vb.net就好辦多了,vb.net提供了一個(gè) NotifyIcon 組件來讓我們可以輕松完成這個(gè)工作。
NotifyIcon 組件在vb.net工具箱中如下圖一所示:
當(dāng)從工具箱中把 NotifyIcon 組件拖放到窗體上時(shí),NotifyIcon 組件顯示在窗體下方的組件欄中。一個(gè) NotifyIcon 組件在系統(tǒng)托盤區(qū)對(duì)應(yīng)顯示一個(gè)圖標(biāo),想要顯示多個(gè)圖標(biāo)的話,則需要在窗體上布置多個(gè) NotifyIcon 組件。
一、NotifyIcon 組件常用屬性和事件
NotifyIcon 組件的屬性和方法比較少。
1、ContextMenu 屬性:用于指定與 NotifyIcon 組件相關(guān)聯(lián)的上下文菜單
2、Icon 屬性:用于設(shè)置 NotifyIcon 組件在系統(tǒng)托盤區(qū)顯示的圖標(biāo),注意它只支持ICO圖標(biāo)文件。
3、Text 屬性:設(shè)置當(dāng)鼠標(biāo)移動(dòng)到圖盤區(qū)的小圖標(biāo)是顯示的提示文本。
4、Visible 屬性:用于指示在系統(tǒng)托盤區(qū)顯示小圖標(biāo)是否可見。
NotifyIcon 組件只響應(yīng)的鼠標(biāo)事件。
二、示例
我們這里來演示如何利用 NotifyIcon 組件為自己的應(yīng)用程序建立一個(gè)系統(tǒng)托盤圖標(biāo)。
1、首先把一個(gè) NotifyIcon 組件,一個(gè)上下文菜單組件 ContextMenu(關(guān)于菜單控件的使用點(diǎn)擊看這里)。
2、為 NotifyIcon 組件設(shè)置顯示的圖標(biāo):
在屬性窗口中選擇"Icon"屬性,然后單擊
NotifyIcon1.Icon = New System.Drawing.Icon("c:\Icon.ico")
3、關(guān)聯(lián)右鍵菜單:
使用 ContextMenu 屬性來關(guān)聯(lián)它的右鍵菜單。在屬性窗口的"ContextMenu"中選擇 ContextMenu1 組件
也可以在窗體的New事件中進(jìn)行關(guān)聯(lián),代碼如下:
NotifyIcon1.ContextMenu = ContextMenu1
4、為右鍵菜單 ContextMenu1 組件添加菜單項(xiàng)。如下圖二所示:
并為每個(gè)菜單項(xiàng)添加代碼,完整的菜單項(xiàng)代碼如下所示:
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
Me.Show()'顯示窗體
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
Me.Hide()'隱藏窗體
End Sub
為了讓"顯示"菜單在窗體時(shí)顯示狀態(tài)下不可用,"隱藏"菜單在窗體隱藏狀態(tài)下不可用,我們?cè)贑ontextMenu1的Popup事件中加入如下代碼:
Private Sub ContextMenu1_Popup(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ContextMenu1.Popup
If Me.Visible = False Then
MenuItem1.Enabled = True
MenuItem2.Enabled = False
ElseIf Me.Visible = True Then
MenuItem1.Enabled = False
MenuItem2.Enabled = True
End If
End Sub
運(yùn)行,將會(huì)在系統(tǒng)托盤區(qū)顯示我們的圖標(biāo),如下圖三所示:
我們通過彈出菜單上的"隱藏"\"顯示"就可以進(jìn)行相應(yīng)的操作了。
以上我們實(shí)現(xiàn)的右鍵菜單的功能,我們還可以在圖標(biāo)的單擊事件中響應(yīng)鼠標(biāo)的左鍵事件,下面的例子演示了如何實(shí)現(xiàn)單擊彈出左鍵菜單。
因?yàn)?ContextMenu 組件是默認(rèn)關(guān)聯(lián)鼠標(biāo)的右擊事件的,所以我們需要通過其它的途徑來實(shí)現(xiàn)左擊菜單。
現(xiàn)在窗體上建立一個(gè)名為 ContextMenu2 的菜單,菜單項(xiàng)如下圖四所示:
由于不能在notifyIcon上直接顯示上下文菜單,只有創(chuàng)建一個(gè)Control作為容器來顯示菜單,詳細(xì)代碼如下所示:
Private Sub NotifyIcon1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseDown
If e.Button = MouseButtons.Left Then
Dim control As New Control(Nothing, control.MousePosition.X, control.MousePosition.Y, 1, 1)
control.Visible = True
control.CreateControl()
Dim pos As New Point(0, 0) '這里的兩個(gè)數(shù)字要根據(jù)你的上下文菜單大小適當(dāng)?shù)卣{(diào)整
Me.ContextMenu2.Show(control, pos)
End If
End Sub
聯(lián)系客服