在Windows应用程序中,通常在右击鼠标时会弹出一个菜单,通过该菜单可以使用户方便、快捷地执行程序的一些常用功能。这些菜单就是所谓的快捷菜单,也称上下文菜单,快捷菜单通常组合了来自窗体的MenuStrip控件的不同菜单项,便于用户在给定应用程序上下文中使用。例如,可以使用分配给TextBox控件的快捷菜单提供菜单项,以便更改文本字体,在控件中查找文本或实现复制和粘贴文本的剪贴版功能a还可以在快捷菜单中显示不在MenuStrip中的新的TooIStripMenultem(菜单项)对象,从而提供与特定情况有关但不适合在MenuStrip中显示的命令。
在通常情况下,当用户在控件或窗体本身上单击鼠标右键时,会弹出快捷菜单。许多可视化控件(包括Form本身)都有一个ControI.ContextMenuStrip属性,该属性将ContextMenuStrip类绑定到显示快捷菜单的控件。多个控件可以共享使用一个ContextMenuStrip控件。
可以通过两种方式显示快捷菜单,最常用的一种方法是先将ContextMenuStrip与控件相关联,这样在单击鼠标右键时会自动显示快捷菜单;外还可以通过使用Show()方法以编程方式显示ContextMenuStrip。由于第一种方法相对简单,所以主要是采用将ContextMenuStrip与控件相关联显式的方式。
(1)继续044替换和删除菜单与菜单项,为子窗体ChildFrm添加ContextMenuStrip控件。
(2)设计菜单内容。
(3)将ContextMenuStripl控件与窗体内的控件RichTextBox关联。方法是先选定窗体内的控件RichTextBox,将其ContextMenuStrip属性值设置为ContextMenuStripl。
(4)为“复制”, “粘贴”和“剪切”菜单项添加Click事件处理程序。
'上下文菜单
Private Sub CopyMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CopyMenuItem.Click
Try
txtContent.Copy()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub PasteMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PasteMenuItem.Click
Try
txtContent.Paste()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Private Sub CutMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CutMenuItem.Click
Try
txtContent.Cut()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
(5)为ContextMenuStripl菜单添加Opening事件,当未选中文本时禁用“剪切”和“复制’’菜单项。
Private Sub ContextMenuStrip1_Opening(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles ContextMenuStrip1.Opening
Dim ContextMenu As ContextMenuStrip = CType(sender, ContextMenuStrip)
If txtContent.SelectedText.Length < 0 Then
ContextMenu.Items(0).Enabled = False
ContextMenu.Items(1).Enabled = False
Else
ContextMenu.Items(0).Enabled = True
ContextMenu.Items(1).Enabled = True
End If
End Sub