我想在winforms列表框控件中检测项目双击。 [如何处理点击空白区域?]

时间:2010-08-23 01:04:45

标签: c# winforms listbox double-click

我有一个列表框,里面有一些项目 我想检测一个项目的双击 目前我正在使用的方法存在一个问题,即如果用户双击空白点,则双击当前所选项目。

更新:
请注意,这个问题并不像最初看起来那么容易 还要注意Timwi答案是不正确的,因为如果选择了一个项目并且我在一个空白区域中单击,则[if(ListBox1.SelectedIndex == -1)]部分不会被执行 我不知道是谁支持他,但他的答案是不正确的 我已经把这部分代码写成了 如果有一个函数可以将鼠标坐标转换为列表框项,那么问题将得到修复

2 个答案:

答案 0 :(得分:14)

还有一个替代事件:MouseDoubleClick,它提供了MouseEventArgs,因此您可以获得点击坐标。然后,您可以调用GetItemBounds()获取包含所选项目的矩形,并检查鼠标坐标是否在此矩形内:

    private void listBox1_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        if(listBox1.SelectedIndex != -1)
        {
            var rect = listBox1.GetItemRectangle(listBox1.SelectedIndex);
            if(rect.Contains(e.Location))
            {
                // process item data here
            }
        }
    }

MouseDoubleClick版本信息:

  • .NET Framework - 支持:4,3.5,3.0,2.0
  • .NET Framework客户端配置文件 - 支持:4,3.5 SP1

答案 1 :(得分:1)

这里用于单个MouseClick的内容可能会被改编。

首先,我将CheckListBox.CheckOnClick的属性设置为true:     clb.CheckOnClick = true;

然后我在盒子检查状态发生变化后强制取消选择项目:

void clb_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (clb.Items.Count > 0) { clb.SetSelected(0, false); }
    }