перетаскивание пользовательских элементов управления из одной flowlayoutpanel в другую
-
12-09-2019 - |
Вопрос
как я могу добавить возможность перетаскивания пользовательского пользовательского элемента управления из 2 flowlayoutpanels?
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))
я скажу вам, тот ли это формат.
Не связан с StackOverflow