在vb6.0中,我們想要在把我們的程序以一個(gè)小圖標顯示在Windows桌面的應用程序托盤(pán)區(即任務(wù)欄的狀態(tài)通知區域,以下都稱(chēng)系統托盤(pán)區),需要使用到復雜難懂的API函數來(lái)完成,而且在測試的時(shí)候還經(jīng)常導致應用程序崩潰?,F在用vb.net就好辦多了,vb.net提供了一個(gè) NotifyIcon 組件來(lái)讓我們可以輕松完成這個(gè)工作。
NotifyIcon 組件在vb.net工具箱中如下圖一所示:

當從工具箱中把 NotifyIcon 組件拖放到窗體上時(shí),NotifyIcon 組件顯示在窗體下方的組件欄中。一個(gè) NotifyIcon 組件在系統托盤(pán)區對應顯示一個(gè)圖標,想要顯示多個(gè)圖標的話(huà),則需要在窗體上布置多個(gè) NotifyIcon 組件。
一、NotifyIcon 組件常用屬性和事件
NotifyIcon 組件的屬性和方法比較少。
1、ContextMenu 屬性:用于指定與 NotifyIcon 組件相關(guān)聯(lián)的上下文菜單
2、Icon 屬性:用于設置 NotifyIcon 組件在系統托盤(pán)區顯示的圖標,注意它只支持ICO圖標文件。
3、Text 屬性:設置當鼠標移動(dòng)到圖盤(pán)區的小圖標是顯示的提示文本。
4、Visible 屬性:用于指示在系統托盤(pán)區顯示小圖標是否可見(jiàn)。
NotifyIcon 組件只響應的鼠標事件。
二、示例
我們這里來(lái)演示如何利用 NotifyIcon 組件為自己的應用程序建立一個(gè)系統托盤(pán)圖標。
1、首先把一個(gè) NotifyIcon 組件,一個(gè)上下文菜單組件 ContextMenu(關(guān)于菜單控件的使用點(diǎn)擊看這里)。
2、為 NotifyIcon 組件設置顯示的圖標:
在屬性窗口中選擇"Icon"屬性,然后單擊

NotifyIcon1.Icon = New System.Drawing.Icon("c:\Icon.ico")
3、關(guān)聯(lián)右鍵菜單:
使用 ContextMenu 屬性來(lái)關(guān)聯(lián)它的右鍵菜單。在屬性窗口的"ContextMenu"中選擇 ContextMenu1 組件
也可以在窗體的New事件中進(jìn)行關(guān)聯(lián),代碼如下:
NotifyIcon1.ContextMenu = ContextMenu1
4、為右鍵菜單 ContextMenu1 組件添加菜單項。如下圖二所示:

并為每個(gè)菜單項添加代碼,完整的菜單項代碼如下所示:
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)下不可用,我們在ContextMenu1的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
運行,將會(huì )在系統托盤(pán)區顯示我們的圖標,如下圖三所示:

我們通過(guò)彈出菜單上的"隱藏"\"顯示"就可以進(jìn)行相應的操作了。
以上我們實(shí)現的右鍵菜單的功能,我們還可以在圖標的單擊事件中響應鼠標的左鍵事件,下面的例子演示了如何實(shí)現單擊彈出左鍵菜單。
因為 ContextMenu 組件是默認關(guān)聯(lián)鼠標的右擊事件的,所以我們需要通過(guò)其它的途徑來(lái)實(shí)現左擊菜單。
現在窗體上建立一個(gè)名為 ContextMenu2 的菜單,菜單項如下圖四所示:

由于不能在notifyIcon上直接顯示上下文菜單,只有創(chuàng )建一個(gè)Control作為容器來(lái)顯示菜單,詳細代碼如下所示:
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è)數字要根據你的上下文菜單大小適當地調整
Me.ContextMenu2.Show(control, pos)
End If
End Sub
聯(lián)系客服