如何仅用鼠标左键选择 ListViewItem? [英] How to select ListViewItem with left mouse button only?

查看:27
本文介绍了如何仅用鼠标左键选择 ListViewItem?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何防止右键单击在单击和双击时选择我的列表视图中的项目?

How can i prevent the right click from selecting an item in my listview both in click and double click?

推荐答案

你可以使用这段代码,我认为它应该可以完成工作.您需要设置一些 bool 变量以指示在您的 MouseDown 中单击了鼠标右键,然后 Clear 选择的项目,如果 SelectedIndexChanged 事件处理程序由于右键单击而触发,然后在 MouseUp 事件上重置指示器.检查代码:

You could use this code, I think it should do the work. You need to set some bool variable to indicate that the right mouse has been clicked in your MouseDown, then Clear selected items, if SelectedIndexChanged event handler fired because of the right click and then reset the indicator on MouseUp event. Check the code:

bool rightClicked = false;
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        rightClicked = true;
    }
    else
    {
        rightClicked = false;
    }
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
    if (rightClicked)
    {
        listView1.SelectedItems.Clear();
    }

}

private void listView1_MouseUp(object sender, MouseEventArgs e)
{
    rightClicked = false;
}

这是我能做的最好的,它保留了选择但闪烁.该解决方案可以使用项目的一些自定义绘图来实现,但这需要太多时间.我把它留给你.

This is the best I could do, it preserves the selection but flickers. the solution could be implemented using some custom drawing of the items but that requires too much time. I leave that to you.

bool rightClicked = false;
int [] lviListIndex = null;
private void listView1_MouseDown(object sender, MouseEventArgs e)
{
      if (e.Button == System.Windows.Forms.MouseButtons.Right)
      {
            rightClicked = true;
            lviListIndex = new int[listView1.SelectedItems.Count];
            listView1.SelectedIndices.CopyTo(lviListIndex, 0);
      }
      else
      {
            rightClicked = false;
      }
}
private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{
      if (rightClicked)
      {
            listView1.SelectedIndices.Clear();   
      }
}

private void listView1_MouseUp(object sender, MouseEventArgs e)
{
      if (rightClicked)
      {
            listView1.SelectedIndexChanged -= new System.EventHandler(listView1_SelectedIndexChanged);
            if (lviListIndex != null)
            {
                 foreach (int index in lviListIndex)
                 {
                      listView1.SelectedIndices.Add(index);
                 }
            }
            lviListIndex = null;
            listView1.SelectedIndexChanged += new System.EventHandler(listView1_SelectedIndexChanged);
      }
      rightClicked = false;
}

这篇关于如何仅用鼠标左键选择 ListViewItem?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆