2013-03-22 49 views
4

我想要的功能是双击ListView中的空行,并让它在其中插入一个项目。它已经响应了MouseDoubleClick事件(用于编辑项目)并且工作正常,但是如果双击位于不包含ListViewItem的ListView的一部分上,似乎MouseDoubleClick不会被触发。ListView - 如何响应双击非项目?

我已经尝试了对话框本身的常规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); 
} 
+0

您可以显示您当前的代码为双击..?也许你可以添加一些额外的条件,检查SelectedIndex或Item值是否为空或空值,然后做你的插入.. – MethodMan 2013-03-22 15:24:33

+0

我最初做了你的建议,问题是双击事件甚至不会被解雇,如果它不在ListViewItem – riqitang 2013-03-22 15:25:23

+0

@Sean,你是否尝试处理'DoubleClick'事件?即使鼠标光标不在某个项目上,也应该触发该项目。 – 2013-03-22 15:26:25

回答

3

MouseDown事件结束了我需要的东西:

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

不要忘记[将自己的答案标记为已接受](http://meta.stackexchange.com/a/5235/171858) – 2013-03-22 16:08:49

+1

我打算,但它要我等两天 – riqitang 2013-03-22 16:16:47