C# 将用户控件从一个flowlayoutpanel拖动到另一个flowlayoutpanel

C# 将用户控件从一个flowlayoutpanel拖动到另一个flowlayoutpanel,c#,drag-and-drop,flowlayoutpanel,C#,Drag And Drop,Flowlayoutpanel,如何从2个flowlayoutpanels添加自定义usercontrol的拖放功能 Usercontrol在下面的代码行中保持为null private void flowLayoutPanel1_DragDrop(object sender, DragEventArgs e) { UserControl userControl = e.Data.GetData(typeof(UserControl)) as UserControl; 所做操作的问题在于,要提

如何从2个flowlayoutpanels添加自定义usercontrol的拖放功能

Usercontrol在下面的代码行中保持为null

    private void flowLayoutPanel1_DragDrop(object sender, DragEventArgs e)
    {
        UserControl userControl = e.Data.GetData(typeof(UserControl)) as UserControl;

所做操作的问题在于,要提取存储在拖动中的数据,必须指定精确的类型

control.DoDragDrop(new Label(), DragDropEffects.Move);

e.Data.GetDataPresent(typeof(Control)) // = false
e.Data.GetDataPresent(typeof(Label)) // = true
您需要做的是创建一个包装器,并将其用于拖放代码

class ControlWrapper
{
  public Control Control { get; private set; }
  public ControlWrapper(Control control) { Control = control; }
}

control.DoDragDrop(new ControlWrapper(new Label()), DragDropEffects.Move);

e.Data.GetDataPresent(typeof(ControlWrapper)) // = true
你的代码现在变成了

ControlWrapper controlWrapper = e.Data.GetData(typeof(ControlWrapper)) as ControlWrapper;
UserControl userControl = controlWrapper.Control as UserControl;
尽量不要听起来太说教,但你应该先检查数据是否以你想要的形式存在
e.Data.GetDataPresent(typeof(ControlWrapper))
将告诉您它是否是那种格式