好吧,我有一个列表框,里面有一些物品。
我想检测一个项目上的双击。
当前,我正在使用的方法存在一个问题,如果用户双击一个空白点,则当前选中的项目将显示为双击。

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

最佳答案

还有一个替代事件: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

07-24 09:50
查看更多