我试图将标签从FlowLayoutPanel拖到另一个FlowLayoutPanel.Im能够拖动但它不会丢弃标签?
我的代码
private void flp_DragEnter(object sender, DragEventArgs e)
{
if ((e.AllowedEffect & DragDropEffects.Link) != 0
&& e.Data.GetDataPresent(typeof(string)))
e.Effect = DragDropEffects.Link;
}
private void flp_DragDrop(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(typeof(Label)))
{
FlowLayoutPanel destination = (FlowLayoutPanel)sender;
Control control = (Control)e.Data.GetData(typeof(Label));
destination.Controls.Add(control);
return;
}
}
private void lbl_MouseDown(object sender, MouseEventArgs e)
{
DoDragDrop((sender as Label).Text, DragDropEffects.Link);
}
答案 0 :(得分:1)
您可以将控件的Name
设置为拖动数据,然后在删除时,按名称查找控件并将其从其父控件集合中删除,并将其添加到目标面板控件集合中。为此:
AllowDrop
属性。示例中的目标控件可以是FlowLayoutPanel
控件。MouseDown
事件以及该控件的处理程序调用{{3}}事件并设置要拖动的数据。示例中的移动控件是标签,此处的数据可以是Name
控件。DoDragDrop
事件并设置DragEnetr
以确定是否允许丢弃。这是您可以检查是否允许丢弃的地方。例如,您可以检查数据是否为字符串,字符串是控件的名称。e.Effect
并使用DragDrop
的GetData
方法获取数据并在删除时执行操作。此处的操作是从当前父级中删除控件并将其添加到新父级。<强>代码:强>
使用以下代码,如果您将control_MouseDown
分配给所有标签的MouseDown
个事件,并为两个流布局面板分配panel_DragEnter
到DragEnter
事件,并指定{{两个流布局面板的1}}到panel_DragDrop
事件,您可以在两个流布局面板之间移动标签,也可以在面板中重新订购标签:
DragDrop