2009-04-20 6 views

Répondre

3

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.

+0

+1 pour le type EXACT, merci – wruckie

Questions connexes