Question

Comment puis-je ajouter des capacités de glisser-déposer d'un UserControl personnalisé de 2 flowlayoutpanels?

Usercontrol garde étant nulle sur la ligne suivante de code ci-dessous

    private void flowLayoutPanel1_DragDrop(object sender, DragEventArgs e)
    {
        UserControl userControl = e.Data.GetData(typeof(UserControl)) as UserControl;
Était-ce utile?

La solution

Le problème avec ce que vous faites est que pour extraire les données qui sont stockées à l'intérieur de la traînée, vous devez spécifier le exact Type.

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

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

Ce que vous devez faire est de créer un emballage et l'utiliser pour votre code glisser-déposer.

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

Et votre code devient maintenant

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

Et en essayant de ne pas paraître trop moralisateur, mais vous devriez vérifier si les données existent sous la forme que vous voulez d'abord. e.Data.GetDataPresent(typeof(ControlWrapper)) vous dira si elle est ce format.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top