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

时间:2013-03-22 15:22:40

标签: c#

我希望能够做的是双击ListView中的空行并让它在那里插入一个项目。它已经响应了MouseDoubleClick事件(用于编辑项目)并且工作正常,但是如果双击位于ListView的一部分不包含ListViewItem,则看起来不会触发MouseDoubleClick。

我已经尝试在对话框本身上响应常规的MouseDoubleClick事件,但如果事件位于ListView的“空区域”之一,则不会触发该事件。

有没有办法在不进行子类化的情况下对ListView的“空区域”进行响应?为了做到这一点,需要/需要处理哪些事件/事件?

对话双击(鼠标和常规)的当前响应如下所示:

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的常规click / mouseclick事件。即使点击是在ListViewItem上,也不会触发。我猜测唯一的解决办法就是继承。

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

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

1 个答案:

答案 0 :(得分:3)

MouseDown事件最终成为我需要的东西:

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