如何限制右键单击选定的列表视图项目或项目而不是空格?

时间:2013-06-27 08:14:53

标签: c# winforms listview

右键单击listview项目正在运行,但它适用于列表视图中的每个空间,无论是项目还是空白空间。我想仅限于所选项目。

我尝试使用listview1.HitTest,但它无效。仍然右键单击是所有listveiw。

if (e.Button == MouseButtons.Right)
        {
            var loc = listView1.HitTest(e.Location);

            if (loc.Item != null && contextMenuStrip1.Items.Count == 0)
            {

                contextMenuStrip1.Items.Add("TEST1");
                contextMenuStrip1.Items.Add("TEST2");

            }              

        }

2 个答案:

答案 0 :(得分:2)

如果HitTest显示鼠标未在项目上方,您可以取消ContextMenuStrip.Opening事件。

此处没有来自事件参数的鼠标位置,因此您必须从Control.MousePosition

获取它
public void ContextMenuOpening(object sender, CancelEventArgs e) {

  Point mousePosition = myListView.PointToClient(Control.MousePosition);
  ListViewHitTestInfo hit = myListView.HitTest(mousePosition);

  e.Cancel = hit.Item == null;
}

答案 1 :(得分:2)

您还可以在listView1_mouseDown()内进行测试;我这样做了它并且工作正常,因此避免了与ContextMenuOpeningControl.MousePosition混淆。唯一的区别是我从lvhti而不是ListViewHitTestInfo宣布var

if (e.Button == MouseButtons.Right)
{
  ListViewHitTestInfo lvhti = this.listView1.HitTest(e.X, e.Y); // or e.Location
  if (lvhti.Item != null){
        contextMenuStrip1.Show(this.listView1, new Point(e.X, e.Y));
  }              
}