перетаскивание пользовательских элементов управления из одной flowlayoutpanel в другую

StackOverflow https://stackoverflow.com/questions/766859

Вопрос

как я могу добавить возможность перетаскивания пользовательского пользовательского элемента управления из 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)) я скажу вам, тот ли это формат.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top