我有一个列表框,里面有一些项目 我想检测一个项目的双击 目前我正在使用的方法存在一个问题,即如果用户双击空白点,则双击当前所选项目。
更新:
请注意,这个问题并不像最初看起来那么容易
还要注意Timwi答案是不正确的,因为如果选择了一个项目并且我在一个空白区域中单击,则[if(ListBox1.SelectedIndex == -1)]部分不会被执行
我不知道是谁支持他,但他的答案是不正确的
我已经把这部分代码写成了
如果有一个函数可以将鼠标坐标转换为列表框项,那么问题将得到修复
答案 0 :(得分: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
版本信息:
答案 1 :(得分:1)
这里用于单个MouseClick的内容可能会被改编。
首先,我将CheckListBox.CheckOnClick的属性设置为true: clb.CheckOnClick = true;
然后我在盒子检查状态发生变化后强制取消选择项目:
void clb_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (clb.Items.Count > 0) { clb.SetSelected(0, false); }
}