C# 我想检测winforms listbox控件中的项目双击。[如何处理点击空白区域?]

C# 我想检测winforms listbox控件中的项目双击。[如何处理点击空白区域?],c#,winforms,listbox,double-click,C#,Winforms,Listbox,Double Click,我有一个列表框,里面有一些项目。 我想检测到双击某个项目。 目前,我使用的方法存在一个问题,即如果用户双击一个空白点,当前选定的项目将显示为双击 更新: 请注意,这个问题并不像一开始看起来那么简单。 还请注意,Timwi的回答不正确,因为如果选择了某个项目,并且我在空白处单击,则不会执行[if(ListBox1.SelectedIndex=-1)]部分 我不知道谁投了他的票,但他的回答不正确。 我已经编写了这部分代码 如果有一个函数可以将鼠标坐标转换为列表框项,那么问题将得到解决。还有一个替代事

我有一个列表框,里面有一些项目。
我想检测到双击某个项目。
目前,我使用的方法存在一个问题,即如果用户双击一个空白点,当前选定的项目将显示为双击

更新:
请注意,这个问题并不像一开始看起来那么简单。
还请注意,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
            }
        }
    }
鼠标双击
版本信息:

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

以下是我用在单个鼠标上的鼠标,可能会被修改

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

然后,在复选框状态更改后,我强制取消选择该项:

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