我希望能够双击ListView中的空行,并在此处插入一个项目。它已经响应鼠标双击事件(用于编辑项目),并且运作良好,但是它似乎不会在双击处于不包含ListViewItem的ListView部分时触发MouseDoubleClick。
我已经尝试在对话框本身上响应常规的MouseDoubleClick事件,但是如果它位于ListView的“null区域”之一,则该事件不会被触发。
是否有一种方法可以响应ListView的“null区域”上的单击,而不需要子类化?需要处理哪个/哪些事件才能实现这一点?
目前对话框双击(鼠标和常规)的响应如下:
我已经尝试在对话框本身上响应常规的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);
}
DoubleClick
事件吗?即使鼠标光标不在项目上,该事件也应该被触发。 - Frédéric Hamidi