2

リストビューアイテムの右クリックは機能していますが、アイテムまたは空のスペースに関係なく、リストビュー内のすべてのスペースで機能します。選択したアイテムだけに限定したい。

を使用しようとしましたlistview1.HitTestが、機能しません。それでも右クリックはすべてリストビューです。

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.OpeningHitTest がマウスが項目の上にないことを示した場合、イベントをキャンセルできます。

ここではイベント引数からのマウス位置がないため、から取得する必要があります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()ます。私はこの方法でそれを行いましたが、うまく機能しているため、 と をいじる必要がありませContextMenuOpeningControl.MousePosition。唯一の違いは、lvhtias of の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));
  }              
}
于 2014-04-12T13:22:02.267 に答える