Pregunta

¿Cómo puedo agregar la capacidad de arrastrar y soltar de un control de usuario personalizado desde 2 paneles de diseño de flujo?

El control de usuario sigue siendo nulo en la siguiente línea de código a continuación

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

Solución

El problema con lo que estás haciendo es que para extraer los datos que se almacenan dentro del arrastre, debes especificar el exacto tipo.

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

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

Lo que tienes que hacer es crear un contenedor y usarlo para tu código de arrastrar y 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

Y tu código ahora se convierte

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

Y tratando de no sonar demasiado sermoneador, pero primero debe verificar si los datos existen en la forma que desea. e.Data.GetDataPresent(typeof(ControlWrapper)) Te diré si es ese formato.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top