4

我想要做的是双击 ListView 中的空行并让它在那里插入一个项目。它已经响应了 MouseDoubleClick 事件(用于编辑项目)并且工作正常,但是如果双击不包含 ListViewItem 的 ListView 的一部分,则似乎不会触发 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 的常规单击/鼠标单击事件。除非单击是在 ListViewItem 上,否则即使这些也不会被触发。我猜唯一的解决方案是子类化。

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

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

1 回答 1

3

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

private void list_MouseDown(object sender, MouseEventArgs e)
{
    if ( e.Clicks == 2 )
        list_MouseDoubleClick(sender, e);
}
于 2013-03-22T16:07:45.143 回答