重写列表视图上的 OnDoubleClick() 事件

本文关键字:事件 OnDoubleClick 列表 视图 重写 | 更新日期: 2023-09-27 18:34:54

我有一个从ListView继承的MyListView类,并且正在覆盖OnDragDrop()(以及实现拖放的其他必要事件(。当我将其中两个MyListview放在表单上时,我可以将一个项目从其中一个拖放到另一个。这部分有效。

现在我想覆盖该类的OnDoubleClick(),这样,如果我将其中两个MyListViews放在窗体上并双击其中一个,该项目将从该类中删除并添加到另一个表单中。但是我无法弄清楚如何做到这一点。你能给我一些想法吗?谢谢。

重写列表视图上的 OnDoubleClick() 事件

不知道您是否以特定方式管理项目的转换,但您可以

  • 或在处理后双击查找"选定项"并对其执行操作

  • 或者你可以使用 ListViewHitTestInfo 类添加如下代码:

    private override OnDoubleClick(...)    
    {
       ListViewHitTestInfo hit = this.HitTest(e.Location);
       if (hit.Item != null)
       {
          ListViewItem doubleClickedItem = hit.Item; 
       }
    }
    

通过以下方式将逻辑放入主机窗体中:

  • 处理双击第一个列表视图
  • 从第一个列表视图中删除
  • 添加到第二个列表视图

除非您以许多不同的形式执行此操作 - 否则不值得将其复杂化。

编辑:如果合理,集中化可以像添加一个做同样事情的方法(伪代码(一样简单

public void MyForm_OnListViewDoubleClick(object sender, EventArgs e)
{
   MoveListItem(firstListView, secondListView);
}
// ... 
public static void MoveListItem(ListView source, ListView destination) 
{
   var listItem = source.SelectedItem;
   source.Remove( listItem );
   destination.Add( listItem );
}

这是你标题的答案

protected override void OnDoubleClick(EventArgs e)
{
    base.OnDoubleClick(e);
}

这是您问题的答案

对从列表视图继承的类使用 DoubleClick 事件这只是链接到您的另一个非常相似的问题。