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 l'exacte type.
control.DoDragDrop(new Label(), DragDropEffects.Move);
e.Data.GetDataPresent(typeof(Control)) // = false
e.Data.GetDataPresent(typeof(Label)) // = true
Ce que vous avez à faire est de créer un wrapper 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
ControlWrapper controlWrapper = e.Data.GetData(typeof(ControlWrapper)) as ControlWrapper;
UserControl userControl = controlWrapper.Control as UserControl;
Et 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 c'est ce format.
+1 pour le type EXACT, merci – wruckie