Vb.net 右键单击时停止选择列表视图中的项目
我在VB 2010中的Windows窗体上有一个ListView 我已将Vb.net 右键单击时停止选择列表视图中的项目,vb.net,listview,contextmenu,right-click,contextmenustrip,Vb.net,Listview,Contextmenu,Right Click,Contextmenustrip,我在VB 2010中的Windows窗体上有一个ListView 我已将ListView的MultiSelect属性设置为False,以便在任何时候只能选择一项 我已经为列表视图配置了一个上下文菜单,当右键单击列表视图时,它会正确显示 [在设计器中添加了一个ContextMenuStrip控件,并将ListView的ContextMenuStrip属性设置为该控件。] 考虑以下两种情况: 用户右键单击已在列表视图中选择的项目。然后显示关联菜单,没有问题 用户右键单击除已在列表视图中选择的项目之外
ListView
的MultiSelect
属性设置为False
,以便在任何时候只能选择一项
我已经为列表视图
配置了一个上下文菜单,当右键单击列表视图
时,它会正确显示
[在设计器中添加了一个ContextMenuStrip
控件,并将ListView
的ContextMenuStrip
属性设置为该控件。]
考虑以下两种情况:
列表视图中选择的项目。然后显示关联菜单,没有问题
列表视图中选择的项目之外的项目,然后在显示关联菜单之前,选择用户右键单击的项目
If e.Button = Windows.Forms.MouseButtons.Right Then
//display context menu because you're handling the click event manually.
...context menu code...
Dim ee As New System.Windows.Forms.MouseEventArgs(Forms.MouseButtons.None, e.Clicks, e.X, e.Y, e.Delta)
e = ee
End If
在场景2中,我需要停止自动选择用户右键单击的项目。需要显示上下文菜单,但以前选择的项目应保持选中状态。
我怎样才能做到这一点
我注意到在ListView
的MouseDown
事件中,SelectedItems.Item(0).Index
属性仍然位于旧索引中。但是,在MouseUp
事件中,此属性将更改为新索引
在MouseDown
事件处理程序或其他任何地方,如何阻止SelectedItems
的更改?或者如何将其更改回上一个选定的项目(,而用户没有注意到它正在更改,然后又将其更改回)
我可以使用下面的代码在MouseDown
或MouseUp
上单击鼠标右键。但是,我不确定需要在该条件中添加什么来阻止SelectedItems
的更改
If e.Button = Windows.Forms.MouseButtons.Right Then
...
End If
注意:我可以为此使用以下代码。但是,当我在场景(2)中使用此选项时,它会选择用户右键单击的项目,然后将其更改回上一个项目,用户会看到此更改。因此,无法使用此解决方案
Dim intPrevSelectedIndex As Integer = -1
Dim boolCancel As Boolean = False
Private Sub ListView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseDown
If ListView1.SelectedItems.Count > 0 AndAlso e.Button = Windows.Forms.MouseButtons.Right Then
boolCancel = True
intPrevSelectedIndex = ListView1.SelectedItems(0).Index
End If
End Sub
Private Sub ListView1_MouseUp(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles ListView1.MouseUp
If boolCancel Then
lstWalkResults.Items(intPrevSelectedIndex).Selected = True
boolCancel = False
End If
End Sub
请告诉我您可能有什么解决方案。谢谢你的时间 在代码隐藏中,您应该能够处理右键单击事件。在该方法中,您将手动显示关联菜单,然后忽略阻止选择项目的单击事件
If e.Button = Windows.Forms.MouseButtons.Right Then
//display context menu because you're handling the click event manually.
...context menu code...
Dim ee As New System.Windows.Forms.MouseEventArgs(Forms.MouseButtons.None, e.Clicks, e.X, e.Y, e.Delta)
e = ee
End If
e.Handled=true
不起作用。我发现错误:“Handled”不是“System.Windows.Forms.MouseEventArgs”的成员。
在MouseEventArgs上快速搜索找到了解决方案。看我修改过的答案,我试过了Dim Hme As HandledMouseEventArgs=e
导致一个错误:无法将“System.Windows.Forms.MouseEventArgs”类型的对象强制转换为“System.Windows.Forms.HandledMouseEventArgs”。
根据我的建议,用您尝试过的内容和错误内容更新您的问题。我提供的答案应该是有效的,请参阅这篇MSDN帖子,它准确地显示了我在回答中向您展示的内容:提供的中提到的HandledMouseEventArgs
类是为了防止MouseWheel
事件被发送到其父容器。它不适用于MouseDown
事件。