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;
È stato utile?

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
scroll top