我想要做的是双击 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);
}

最佳答案

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

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

关于c# - ListView - 如何响应双击非项目?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15573960/

10-17 00:45