Pergunta

Como posso adicionar arrastar e capacidade de queda de um usercontrol personalizado a partir de 2 flowlayoutpanels?

Usercontrol continua sendo nula na seguinte linha de código abaixo

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

Solução

O problema com o que você está fazendo é que para extrair os dados que são armazenados dentro do arrasto, você tem que especificar o exata tipo.

control.DoDragDrop(new Label(), DragDropEffects.Move);

e.Data.GetDataPresent(typeof(Control)) // = false
e.Data.GetDataPresent(typeof(Label)) // = true

O que você tem a fazer é criar um wrapper e usar isso para o seu código de arrastar-e-soltar.

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

E o seu código torna-se agora

ControlWrapper controlWrapper = e.Data.GetData(typeof(ControlWrapper)) as ControlWrapper;
UserControl userControl = controlWrapper.Control as UserControl;

E tentando não parecer muito enfadonho, mas você deve verificar se os dados existem na forma que você quer primeiro. e.Data.GetDataPresent(typeof(ControlWrapper)) vai dizer se é esse formato.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top