2

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

我尝试使用,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");

            }              

        }
4

2 回答 2

2

ContextMenuStrip.Opening如果HitTest 显示鼠标不在某个项目上,您可以取消该事件。

你没有从这里的事件参数中获得鼠标位置,所以你必须从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;
}
于 2013-06-27T08:43:51.357 回答
2

你也可以在里面做测试listView1_mouseDown();我是这样做的,它工作正常,因此避免了与ContextMenuOpeningand混淆Control.MousePosition。唯一的区别是我声明lvhti为 ofListViewHitTestInfo而不是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));
  }              
}
于 2014-04-12T13:22:02.267 回答