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"属性,然后单击 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 源代码网供稿. |




