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

Kar*_*rim 3 c# listbox double-click winforms

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

更新:
请注意,这个问题并不像最初看起来那么容易.
还要注意Timwi答案是不正确的,因为[if(ListBox1.SelectedIndex == -1)]部分没有被执行,如果有一个项目被选中,我点击了一个空的空间我不知道是谁投票给他,但他的答案不是正确.
我已经编写了这部分代码,
如果有一个函数可以将鼠标坐标转换为列表框项,那么问题将得到解决

max*_*max 14

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

    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
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

MouseDoubleClick 版本信息:

  • .NET Framework - 支持:4,3.5,3.0,2.0
  • .NET Framework Client Profile - 受以下版本支持:4,3.5 SP1