перетаскивание пользовательских элементов управления из одной панели Flowlayout в другую - PullRequest
3 голосов
/ 20 апреля 2009

как добавить возможность перетаскивания пользовательского элемента управления из 2-х потоковых панелей?

Usercontrol остается нулевым в следующей строке кода ниже

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

1 Ответ

3 голосов
/ 20 апреля 2009

Проблема с тем, что вы делаете, заключается в том, что для извлечения данных, которые хранятся внутри перетаскивания, вы должны указать тип точный .

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)) скажет вам, если это тот формат.

...