我在运行时创建上下文菜单取决于datagridview的选定单元格中的文本 像这样:
With ContextMenuStrip1
.Items.Clear()
Dim Str As String = DataGridView1.Item(1, DataGridView1.CurrentRow.Index).Value
Dim strArr() As String = Str.Split(" ")
For count As Integer = 0 To strArr.Length - 1
If strArr(count).Length > 1 Then
.Items.Add(strArr(count))
End If
Next
.Items.Add("-")
.Items.Add("Common operation ...")
.Items.Add("Second common operation ...")
AddHandler .Click, AddressOf cMenu_Click
.Show(New Point(Cursor.Position.X, Cursor.Position.Y))
End With
etc...
然后我添加这样的事件处理程序:
Private Sub cMenu_Click(ByVal sender As Object, ByVal e As System.EventArgs)
Dim mytext As String
mytext = (CType(sender, ContextMenuStrip).Text)
Debug.Print(mytext)
'after all...
RemoveHandler ContextMenuStrip1.Click, AddressOf cMenu_Click
End Sub
作为使用此代码的vbnet初学者,我无法在事件处理程序中获取已触发菜单项的文本 所以请帮忙搞定。
答案 0 :(得分:3)
每个菜单项都需要处理程序。
以这种方式尝试(通过添加快捷键更新):
For count As Integer = 0 To strArr.Length - 1
If strArr(count).Length > 1 Then
Dim newMenu As New ToolStripMenuItem(strArr(count), _
Nothing, AddressOf cMenu_Click)
newMenu.ShortcutKeys = Keys.Control Or Keys.C
.Items.Add(newMenu)
End If
Next
您的点击方法应更改为处理ToolStripMenuItem
而不是:
Private Sub cMenu_Click(ByVal sender As Object, ByVal e As EventArgs)
Dim mytext As String
mytext = DirectCast(sender, ToolStripMenuItem).Text
Debug.Print(mytext)
End Sub
答案 1 :(得分:0)
为ContextMenuStrip的所有子项的Click事件添加一个处理程序(指向同一方法)。然后在您的方法中将其转换为ToolStripMenuItem或MenuItem类(无论您使用什么),以查找所单击项目的文本。