【发布时间】:2014-03-21 12:40:37
【问题描述】:
我在 VB 2010 的 Windows 窗体上有一个 ListView。
我已将ListView 的MultiSelect 属性设置为False,这样任何时候都只能选择一项。
我为ListView 配置了一个上下文菜单,当ListView 被右键单击时它会正确显示。
[在设计器中添加了ContextMenuStrip 控件并将ListView 的ContextMenuStrip 属性设置为此。]
考虑以下两种情况:
用户右键单击已在
ListView中选择的项目。然后显示上下文菜单,没有问题。用户右键点击
ListView中的已选中项目以外的项目,然后在显示上下文菜单之前,用户右键单击的项目是已选中。
在场景 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
请告诉我您可能有的任何解决方案。感谢您的宝贵时间!
【问题讨论】:
标签: vb.net listview contextmenu right-click contextmenustrip