从一个 FlowLayoutPanel 拖动用户控件到另一个 FlowLayoutPanel

3

如何为自定义用户控件添加从两个流式布局面板中拖放的功能?

以下代码行中,用户控件始终为空。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接