vb.net入门--NotifyIcon 组件的使用


在vb6.0中,我们想要在把我们的程序以一个小图标显示在Windows桌面的应用程序托盘区(即任务栏的状态通知区域,以下都称系统托盘区),需要使用到复杂难懂的API函数来完成,而且在测试的时候还经常导致应用程序崩溃。现在用vb.net就好办多了,vb.net提供了一个 NotifyIcon 组件来让我们可以轻松完成这个工作。

NotifyIcon 组件在vb.net工具箱中如下图一所示:

当从工具箱中把 NotifyIcon 组件拖放到窗体上时,NotifyIcon 组件显示在窗体下方的组件栏中。一个 NotifyIcon 组件在系统托盘区对应显示一个图标,想要显示多个图标的话,则需要在窗体上布置多个 NotifyIcon 组件。

一、NotifyIcon 组件常用属性和事件

NotifyIcon 组件的属性和方法比较少。

1、ContextMenu 属性:用于指定与 NotifyIcon 组件相关联的上下文菜单

2、Icon 属性:用于设置 NotifyIcon 组件在系统托盘区显示的图标,注意它只支持ICO图标文件。

3、Text 属性:设置当鼠标移动到图盘区的小图标是显示的提示文本。

4、Visible 属性:用于指示在系统托盘区显示小图标是否可见。

NotifyIcon 组件只响应的鼠标事件。

二、示例

我们这里来演示如何利用 NotifyIcon 组件为自己的应用程序建立一个系统托盘图标。

1、首先把一个 NotifyIcon 组件,一个上下文菜单组件 ContextMenu(关于菜单控件的使用点击看这里)。

2、为 NotifyIcon 组件设置显示的图标:

在属性窗口中选择"Icon"属性,然后单击,在本地硬盘上找到合适的图标即可,也可以使用代码在合适的位置添加,代码添加如下所示:(假设图标文件存放在C盘下)

NotifyIcon1.Icon = New System.Drawing.Icon("c:\Icon.ico")

3、关联右键菜单:

使用 ContextMenu 属性来关联它的右键菜单。在属性窗口的"ContextMenu"中选择 ContextMenu1 组件

也可以在窗体的New事件中进行关联,代码如下:

NotifyIcon1.ContextMenu = ContextMenu1

4、为右键菜单 ContextMenu1 组件添加菜单项。如下图二所示:

并为每个菜单项添加代码,完整的菜单项代码如下所示:

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

为了让"显示"菜单在窗体时显示状态下不可用,"隐藏"菜单在窗体隐藏状态下不可用,我们在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

运行,将会在系统托盘区显示我们的图标,如下图三所示:

我们通过弹出菜单上的"隐藏"\"显示"就可以进行相应的操作了。

以上我们实现的右键菜单的功能,我们还可以在图标的单击事件中响应鼠标的左键事件,下面的例子演示了如何实现单击弹出左键菜单。

因为 ContextMenu 组件是默认关联鼠标的右击事件的,所以我们需要通过其它的途径来实现左击菜单。

现在窗体上建立一个名为 ContextMenu2 的菜单,菜单项如下图四所示:

由于不能在notifyIcon上直接显示上下文菜单,只有创建一个Control作为容器来显示菜单,详细代码如下所示:

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) '这里的两个数字要根据你的上下文菜单大小适当地调整

Me.ContextMenu2.Show(control, pos)

End If

End Sub

 

本文作者:
« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3