Vra

Hoe kan ek voeg sleep en vermoëns van 'n persoonlike usercontrol van 2 flowlayoutpanels?

Usercontrol hou om nul op die volgende reël van die kode hieronder

    private void flowLayoutPanel1_DragDrop(object sender, DragEventArgs e)
    {
        UserControl userControl = e.Data.GetData(typeof(UserControl)) as UserControl;
Was dit nuttig?

Oplossing

Die probleem met wat jy doen is dat die data wat gestoor word in die drag te onttrek, moet jy die presiese tipe spesifiseer.

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

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

Wat jy moet doen is om te skep 'n omslag en gebruik dit vir jou sleep-en-drop-kode.

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

En jou kode word nou

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

En probeer om nie te prekerig klink, maar jy moet kyk of die data in die vorm wat jy wil eerste bestaan. e.Data.GetDataPresent(typeof(ControlWrapper)) sal jou vertel as dit is wat formaat.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top