如何响应双击非项目

本文关键字:双击 项目 响应 何响应 | 更新日期: 2023-09-27 18:05:24

我想要做的是双击ListView中的空行,并在那里插入一个项目。它已经响应了MouseDoubleClick事件(用于编辑项目),并且工作得很好,但是如果双击是在ListView中不包含ListViewItem的部分,则MouseDoubleClick不会被触发。

我已经尝试响应对话框本身的常规MouseDoubleClick事件,但事件不会被触发,如果它是在ListView的"null区域"之一。

是否有一种方法来做响应,点击一个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);
}