2010-08-23 60 views
3

好吧,我有一个列表框内的一些项目。
我想检测一个项目的双击。
目前我使用的方法有一个问题,如果用户双击一个空白点,当前选定的项目被双击信号发送。我想检测一个项目双击WinForms列表框控件。 [如何处理点击空白区域?]

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

回答

14

还有一个另外的事件功能: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框架 - Spported:4,3.5, 3.0,2.0
  • .NET Framework Client Profile受 - 支持:4,3.5 SP1
+0

呀,这我什么,我一直在寻找,谢谢:) – Karim 2010-08-23 01:50:19

1

下面是我用一个单一的鼠标点击,可能会改编。

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

然后我强迫的项目取消后的箱checkstate改变:

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