我想在winforms列表框控件中检测项目双击。

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

更新:
请注意,这个问题并不像最初看起来那么容易。
还要注意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 Client Profile – 受以下版本支持:4,3.5 SP1

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

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

然后我在盒子checkstate改变后强制取消选择该项目:

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