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

时间:2009-04-20 04:07:57

标签: c# drag-and-drop flowlayoutpanel

如何从2个flowlayoutpanels添加自定义用户控件的拖放功能?

Usercontrol在下面的代码行

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

1 个答案:

答案 0 :(得分:3)

您正在做的问题是,要提取存储在拖动内部的数据,您必须指定完全类型。

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))会告诉您它是否是那种格式。