运行时的ContextMenuStrip事件处理程序

时间:2012-06-22 21:02:08

标签: vb.net

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

2 个答案:

答案 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类(无论您使用什么),以查找所单击项目的文本。