【问题标题】:ListView - How to respond to double click on non-item?ListView - 如何响应双击非项目?
【发布时间】:2013-03-22 15:22:40
【问题描述】:

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

【问题讨论】:

  • 你能显示你当前的双击代码吗?也许您可以添加一些额外的条件来检查 SelectedIndex 或 Item 值是否为空或空,然后执行您的 Insert..
  • 我最初按照你的建议做了,问题是如果它不在 ListViewItem 上,双击事件甚至不会被触发
  • @Sean,您是否尝试过处理DoubleClick 事件?即使鼠标光标不在某个项目上,也应该触发那个。
  • @FrédéricHamidi 是的,对于 ListView 和 Dialog
  • 您能否显示您仍然应该能够执行此操作的代码您可能做错了一些事情,它应该出现在 Double_Click 事件上,然后您可以检查类似 YourListView.SelectedItems[0].SubItems[0].Text = string.Empty {then add new Item to Listview } 或 @ 的内容987654327@需要看已有代码

标签: c#


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
相关资源
最近更新 更多