单击子项后如何添加事件或获取contextmenustrip控件子项的文本?
这是我的代码:
Try
enrollment_conn.Open()
command = New SqlCommand("SELECT DISTINCT Section FROM dbo.Enrollees WHERE Grade = '" & Main.Enrollees_Cbx_grade.Text & "' AND Strand = '" & Main.Enrollees_Cbx_strand.Text & "' AND School_Year = '" & Main.Enrollees_Cbx_sy.Text & "' AND Enrolled = 'Yes'", enrollment_conn)
reader = command.ExecuteReader
Main.Enrollees_CMS_enrolleesList.Items.Clear()
Dim tm = New ToolStripMenuItem("Filter")
Main.Enrollees_CMS_enrolleesList.Items.Add(tm)
While reader.Read
tm.DropDownItems.Add(reader.Item("Section").ToString)
End While
enrollment_conn.Close()
Catch ex As Exception
MsgBox(ex.Message, vbExclamation)
End Try
上面的代码添加了一个名为Filter的Toolstripitem,当我右键单击我的datagridview时。过滤器项显示并具有我通过使用查询添加的子项。问题是如何获取文本或将事件添加到子项?谢谢。
答案 0 :(得分:2)
您在此处使用的Add
方法已重载:
tm.DropDownItems.Add(reader.Item("Section").ToString)
您应该使用允许您指定Click
事件处理程序的重载:
tm.DropDownItems.Add(reader.Item("Section").ToString, Nothing, AddressOf MenuItem_Click)
第三个参数是事件处理程序方法的委托。如果您不愿意自己从头开始编写它,最简单的选择就是让IDE为您创建一个。只需双击设计器中的菜单项,就会以通常的方式生成事件处理程序。然后,您可以从声明末尾删除Handles
子句,并将名称更改为更通用的名称。然后,您可以访问通过sender
参数单击的菜单项,该菜单项始终是引发事件的对象的引用:
Private Sub MenuItem_Click(sender As Object, e As EventArgs)
Dim menuItem = DirectCast(sender, ToolStripMenuItem)
'Use menuItem here.
End Sub
如果每个菜单项都需要数据,则可以在创建时将其分配给Tag
属性,例如
tm.DropDownItems.Add(reader.Item("Section").ToString,
Nothing,
AddressOf MenuItem_Click).Tag = reader.Item("Data")
,然后在事件处理程序中再次将其取回:
Private Sub MenuItem_Click(sender As Object, e As EventArgs)
Dim menuItem = DirectCast(sender, ToolStripMenuItem)
Dim data = menuItem.Tag
'Use data here.
End Sub