trascinando controlli utente da un FlowLayoutPanel all'altro
-
12-09-2019 - |
Domanda
Come si aggiunge la resistenza e la capacità goccia di un UserControl personalizzato da 2 flowlayoutpanels?
Usercontrol continua ad essere nullo nella seguente riga di codice seguente
private void flowLayoutPanel1_DragDrop(object sender, DragEventArgs e)
{
UserControl userControl = e.Data.GetData(typeof(UserControl)) as UserControl;
Soluzione
Il problema con quello che stai facendo è che per estrarre i dati memorizzati all'interno del trascinamento, è necessario specificare il esattamente tipo.
control.DoDragDrop(new Label(), DragDropEffects.Move);
e.Data.GetDataPresent(typeof(Control)) // = false
e.Data.GetDataPresent(typeof(Label)) // = true
Quello che devi fare è creare un wrapper e l'uso che per il codice drag-and-drop.
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 il codice diventa ora
ControlWrapper controlWrapper = e.Data.GetData(typeof(ControlWrapper)) as ControlWrapper;
UserControl userControl = controlWrapper.Control as UserControl;
E cercando di non sembrare troppo predicatorio, ma si dovrebbe verificare se il dato esiste nella forma che si desidera prima. e.Data.GetDataPresent(typeof(ControlWrapper))
vi dirà se si tratta di quel formato.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow