c# - 将用户控件从一个流程布局面板拖动到另一个流程布局面板

标签 c# drag-and-drop flowlayoutpanel

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

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

关于c# - 将用户控件从一个流程布局面板拖动到另一个流程布局面板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/766859/

相关文章:

c# - FlowLayoutPanel 自动调整大小

c# - 应使用哪种数据结构从文本文件中读取和存储大约 500 万个条目

c# - 如果我们在 C# 中将两个整数相除,如何始终得到一个整数

c# - 使用WCF服务返回MembershipUser

javascript - 没有相同维度的 JQuery 可排序网格功能

java - 如何将 JLabel 内的图标移动(拖放)到另一个 JLabel,而不是复制它?

c# - Entity Framework : What would cause slow queries after adding a table?

java - 在 Mouse Up 上获取 SWT 列表中的项目

c# - Windows 窗体中的 Flowlayout 和 Tablelayout

c# - 内部带有 flowlayout 面板且 autosize = true 的 Groupbox 会收缩,就像它是空的一样