ListView - 如何响应非项目的双击?

4
我希望能够双击ListView中的空行,并在此处插入一个项目。它已经响应鼠标双击事件(用于编辑项目),并且运作良好,但是它似乎不会在双击处于不包含ListViewItem的ListView部分时触发MouseDoubleClick。
我已经尝试在对话框本身上响应常规的MouseDoubleClick事件,但是如果它位于ListView的“null区域”之一,则该事件不会被触发。
是否有一种方法可以响应ListView的“null区域”上的单击,而不需要子类化?需要处理哪个/哪些事件才能实现这一点?
目前对话框双击(鼠标和常规)的响应如下:
if ( RectangleToScreen(list.ClientRectangle).Contains(e.X, e.Y) )
   list_MouseDoubleClick(sender, e);

并且在 list_MouseDoubleClick() 方法中(其中 m_SelItem 是当前选定的项)

private void list_MouseDoubleClick(object sender, MouseEventArgs e)
{
   if ( m_SelItem == null && m_Combo.Items.Count > 0 )
   {
    m_SelItem = new ListViewItem(new string[] { "", "Rd" });
    list.Items.Add(m_SelItem);
   }
...
}

编辑:看起来整个区域对事件都是一个黑洞。例如,我尝试响应ListView和Dialog的普通点击/鼠标单击事件,即使是这些也只有当点击在ListViewItem上时才会被触发。我猜唯一的解决方法就是子类化。

编辑:坚持不懈终将获得回报!事实证明,我可以通过响应“MouseDown”事件来获得所需的结果:

private void list_MouseDown(object sender, MouseEventArgs e)
{
    if ( e.Clicks == 2 )
        list_MouseDoubleClick(sender, e);
}

你能展示一下双击事件的当前代码吗?也许你可以添加一些额外的条件来检查SelectedIndex或Item值是否为空,然后执行插入操作。 - MethodMan
我最初按照你的建议去做了,但问题是如果不在ListViewItem上,双击事件甚至不会被触发。 - riqitang
@Sean,你尝试过处理DoubleClick事件吗?即使鼠标光标不在项目上,该事件也应该被触发。 - Frédéric Hamidi
@DJKRAZE,这相当简单:编辑:原始帖中的代码 - riqitang
你能把这个放在初始问题中吗?同时请展示完整的方法,如果不展示完整的代码块,我就看不懂你的意思。另外,如果你想触发一个 Double_Click 事件,它应该放在 Double_Click 事件处理程序中。 - MethodMan
显示剩余3条评论
1个回答

3

MouseDown事件最终是我需要的:

private void list_MouseDown(object sender, MouseEventArgs e)
{
    if ( e.Clicks == 2 )
        list_MouseDoubleClick(sender, e);
}

1
我计划这样做,但它要求我等待2天。 - riqitang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接