仅在所选项目上为每个项目的列表视图添加右键单击选项

时间:2013-07-23 15:31:20

标签: c# listview contextmenustrip

我有一个项目的列表视图,我希望这样当用户右键单击其中一个项目时,它会显示一个上下文,其中包含用户可以执行的一些选项或任务,但我希望它只是在点击一个项目时才带上contextmenustrip,而不是白色空间。有这个设置吗?

2 个答案:

答案 0 :(得分:1)

你必须自己做。这有点痛苦。基本流程是......

  1. 创建一个名为contextMenuAllowed的全局布尔值。
  2. 订阅MouseDown的{​​{1}}个活动。使用鼠标坐标(e.X和e.Y)在ListView上执行HitTest。如果他们点击了一个项目而右键单击,则将contextMenuAllowed设置为true。
  3. 订阅ListView的{​​{1}}个活动。如果是鼠标右键,则将contextMenuAllowed设置为false。
  4. 订阅MouseUp / ListView的{​​{1}}个活动。如果contextMenuAllowed为false,则将e.Cancel设置为true并返回。这是停止实际打开的上下文菜单。
  5. 这有点痛苦但很容易完成,用户永远不会知道差异。

    这是一个例子,我刚刚创建了一个新的自定义控件,它将完全符合您的要求:

    Opening

答案 1 :(得分:1)

有一种非常简单的方法可以做到这一点:

  1. 将上下文菜单分配给ListView对象的ContextMenuStrip属性(这可以在GUI设置中完成)
  2. 处理上下文菜单对象的Opening事件,并在事件处理程序内部进行检查,是否选择了ListView对象的任何项。如果不是这种情况,请取消该事件:

    If myListView.SelectedItems.Count = 0 Then e.Cancel = True