arrastrar controles de usuario de un panel de diseño de flujo a otro
-
12-09-2019 - |
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;
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