在右键单击中选择停止列表视图中的项目

时间:2014-03-21 12:40:38

标签: vb.net listview contextmenu right-click contextmenustrip

我在VB 2010中的Windows窗体上有一个ListView。

我已将MultiSelect的{​​{1}}属性设置为ListView,因此任何时候都只能选择一个项目。

我为False配置了一个上下文菜单,并在右键单击ListView时正确显示。

[在Designer中添加了ListView控件,并将ContextMenuStrip的{​​{1}}属性设置为此。]

请考虑以下两种情况:

  1. 用户右键单击已在ContextMenuStrip中选择的项目。然后显示上下文菜单,没有问题。

  2. 用户右键单击 ListView中已选中项目以外的项目,然后在显示上下文菜单之前,用户权限的项目点击已被选中。

  3. 在方案2中,我需要停止自动选择用户右键单击的项目。需要显示上下文菜单,但之前选择的项目应保持选中状态。

    我怎样才能做到这一点?

    我注意到在ListView的{​​{1}}事件中,ListView属性仍在旧索引中。但是,在ListView事件中,此属性将更改为新索引。

    MouseDown事件处理程序或其他任何地方,如何阻止SelectedItems.Item(0).Index更改?或者如何将其更改回上一个选定的项目(用户不会注意到它被更改然后更改回来)?

    我可以使用下面的代码右键点击MouseUpMouseDown。但是,我不确定我需要在这个条件下阻止SelectedItems更改。

    MouseDown

    注意:我可以使用以下代码。但是,当我在场景(2)中使用它时,它会选择用户右键单击的项目,然后将其更改回上一项目,用户可以看到此更改。因此无法使用此解决方案。

    MouseUp

    请告诉我您可能拥有的任何解决方案。谢谢你的时间!

1 个答案:

答案 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