检索在列表框中右键单击的项以获取上下文菜单操作 - vb.net



在我的 vb.net 应用程序中,我有一个包含一堆电子邮件地址的列表框。

列表框中有一个上下文菜单,其中包含查看联系人、修改和删除选项。

我目前坚持如何确定 listbox1.items 用户右键单击以在上下文菜单操作中使用......例如,假设用户右键单击"johnsmith@stackoverflow.com"并单击删除,然后我需要说

   listbox1.items.remove(THEITEMTHATWASRIGHTCLICKED)

但是我如何确定被右键单击的项目?

我试过了。。。

 itemthatwasrightclicked = listbox1.SelectedIndex

但是,如果我在左键单击之前右键单击某个项目,则返回的索引为 -1。如果我左键单击该项目以先选择它,然后右键单击,我会返回正确的索引,因此,如果用户右键单击而没有先左键单击,则似乎不会选择该项目。

我不知所措,任何帮助都值得赞赏!

我觉得这应该是一件简单的事情。

提前感谢! :)

listbox 类在 MSDN 中为此提供了一个方法。 您将需要使用 IndexFromPoint(Point) 方法。 调用此方法时,它返回在指定点的坐标处找到的列表框中项的索引。 您需要通过在 ListBox 的 MouseDown 事件中实现此坐标来捕获右键单击事件的坐标。

在其最基本的形式中,其代码如下。

Private Sub ListBox1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles ListBox1.MouseDown
    If e.Button = MouseButtons.Right Then
        ListBox1.SelectedIndex = ListBox1.IndexFromPoint(e.X, e.Y)
    End If
End Sub

最新更新