在我的vb.net应用中,我有一个包含大量电子邮件地址的列表框。
列表框中有一个上下文菜单,其中包含查看联系人,修改和删除选项。
我目前仍然坚持如何确定用户右键单击以在上下文菜单操作中使用的listbox1.items中的哪个项目。所以说例如用户右键单击' johnsmith @ stackoverflow.com'并点击删除我然后需要说
listbox1.items.remove(THEITEMTHATWASRIGHTCLICKED)
但我如何确定THEITEMTHATWASRIGHTCLICKED?
我试过......
itemthatwasrightclicked = listbox1.SelectedIndex
但如果我在左键单击之前右键单击某个项目,则返回-1的返回索引。如果我左键单击该项目以先选择它,然后右键单击我会返回正确的索引,因此,如果用户右键单击而没有先左键单击,则该项目不会被选中。
我感到茫然,感谢任何帮助!
我觉得这应该是简单的事情。
提前致谢! :)
答案 0 :(得分:2)
listbox类在MSDN中为此提供了一种方法。您将需要使用IndexFromPoint(Point)方法。调用此方法时,它将返回在指定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