我正在使用C#和Winforms 3.5

我有一个用户控件的列表,所有这些控件都源自一个基类。可以将这些控件添加到各种面板中,而我正在尝试实现拖放功能,我遇到的问题是DragDrop事件。

对于DragEventArgs,e.Data.GetData(typeof(baseClass))不起作用。它想要:

e.Data.GetData(typeof(derivedClass1))
e.Data.GetData(typeof(derivedClass2))
etc...

有什么办法可以解决这个问题,还是有更好的架构方法?

最佳答案

您可以将数据包装在一个通用类中。例如,假设您的基类名为DragDropBaseControl

public class DragDropInfo
{
  public DragDropBaseControl Control { get; private set; }

  public DragDropInfo(DragDropBaseControl control)
  {
    this.Control = control;
  }
}

然后可以在基类中使用以下命令启动拖放操作
DoDragDrop(new DragDropInfo(this), DragDropEffects.All);

您可以使用以下命令访问拖动事件中的数据
e.Data.GetData(typeof(DragDropInfo));

我是否正确理解您的要求?

关于C#拖放-使用基类的e.Data.GetData,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2731425/

10-13 06:06