我在VB 2010中的Windows窗体上有一个ListView。
我已将MultiSelect
的{{1}}属性设置为ListView
,因此任何时候都只能选择一个项目。
我为False
配置了一个上下文菜单,并在右键单击ListView
时正确显示。
[在Designer中添加了ListView
控件,并将ContextMenuStrip
的{{1}}属性设置为此。]
请考虑以下两种情况:
用户右键单击已在ContextMenuStrip
中选择的项目。然后显示上下文菜单,没有问题。
用户右键单击 ListView
中已选中项目以外的项目,然后在显示上下文菜单之前,用户权限的项目点击已被选中。
在方案2中,我需要停止自动选择用户右键单击的项目。需要显示上下文菜单,但之前选择的项目应保持选中状态。
我怎样才能做到这一点?
我注意到在ListView
的{{1}}事件中,ListView
属性仍在旧索引中。但是,在ListView
事件中,此属性将更改为新索引。
在MouseDown
事件处理程序或其他任何地方,如何阻止SelectedItems.Item(0).Index
更改?或者如何将其更改回上一个选定的项目(用户不会注意到它被更改然后更改回来)?
我可以使用下面的代码右键点击MouseUp
或MouseDown
。但是,我不确定我需要在这个条件下阻止SelectedItems
更改。
MouseDown
注意:我可以使用以下代码。但是,当我在场景(2)中使用它时,它会选择用户右键单击的项目,然后将其更改回上一项目,用户可以看到此更改。因此无法使用此解决方案。
MouseUp
请告诉我您可能拥有的任何解决方案。谢谢你的时间!
答案 0 :(得分:1)
在后面的代码中,您应该能够处理右键单击事件。在该方法中,您将手动显示上下文菜单,然后忽略单击事件,阻止选择该项。
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