3

好吧,我有一个列表框,里面有一些项目。
我想检测一个项目的双击。
目前我使用的方法有一个问题,如果用户双击一个空白点,则当前选定的项目被指示为双击。

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

4

2 回答 2

15

还有一个替代事件: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
于 2010-08-23T01:46:34.523 回答
1

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

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

然后我在框检查状态更改后强制取消选择该项目:

void clb_ItemCheck(object sender, ItemCheckEventArgs e)
    {
        if (clb.Items.Count > 0) { clb.SetSelected(0, false); }
    }
于 2014-03-17T18:55:19.810 回答