3

我在运行时创建上下文菜单取决于 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 初学者,我无法在事件处理程序中获取已触发菜单项的文本。
所以请帮助获取它。

4

2 回答 2

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

您的 click 方法应改为处理 a 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
于 2012-06-22T21:55:05.930 回答
0

为 ContextMenuStrip 的所有子项的 Click 事件添加一个处理程序(指向相同的方法)。然后在您的方法中将其转换为 ToolStripMenuItem 或 MenuItem 类(无论您使用什么)以查找单击项目的文本。

于 2012-06-22T21:43:44.427 回答