2010-09-16 5 views
4

Je crée une nouvelle application Windows Forms. Je fais glisser un bouton sur le formulaire. Je dois glisser et déposer ce bouton à un autre emplacement dans ce formulaire lors de l'exécution. des extraits de code ou des liens sont appréciés. J'ai passé une demi-heure à chercher avant de venir ici.Faites glisser et déposez le bouton Windows Forms

+0

Comment allez-vous savoir quand « cliquez sur » le bouton si vous pouvez également le faire glisser? – msergeant

+0

Je n'ai pas besoin d'événements de clic. J'ai juste besoin que l'utilisateur puisse réorganiser les contrôles montrés sur le formulaire. Aucune autre fonctionnalité n'est requise – CodingJoy

Répondre

9

Vous pouvez commencer avec quelque chose comme ceci:

bool isDragged = false; 
    Point ptOffset; 
    private void button1_MouseDown(object sender, MouseEventArgs e) 
    { 
    if (e.Button == MouseButtons.Left) 
    { 
     isDragged = true; 
     Point ptStartPosition = button1.PointToScreen(new Point(e.X, e.Y)); 

     ptOffset = new Point(); 
     ptOffset.X = button1.Location.X - ptStartPosition.X; 
     ptOffset.Y = button1.Location.Y - ptStartPosition.Y; 
    } 
    else 
    { 
     isDragged = false; 
    } 
    } 

    private void button1_MouseMove(object sender, MouseEventArgs e) 
    { 
    if (isDragged) 
    { 
     Point newPoint = button1.PointToScreen(new Point(e.X, e.Y)); 
     newPoint.Offset(ptOffset); 
     button1.Location = newPoint; 
    } 
    } 

    private void button1_MouseUp(object sender, MouseEventArgs e) 
    { 
    isDragged = false; 
    } 
+0

Merci pour votre réponse. J'ai essayé cela mais le bouton reste toujours là à son emplacement d'origine. J'ai déplacé le code dans le gestionnaire MouseMove dans le gestionnaire MouseUp et maintenant le bouton se déplace vers un nouvel emplacement. le nouvel emplacement est un peu erratique. besoin de comprendre cette partie. mais merci encore pour votre aide – CodingJoy

+0

L'emplacement erratique est probablement dû au décalage. Vous obtenez les coordonnées de la souris dans un format différent des coordonnées de l'écran de l'emplacement. C'est la raison des appels à PointToScreen. – msergeant

+0

@msergeant Excellent exemple, fonctionne très bien! Cependant, j'éprouve une queue vacillante lorsque je fais glisser le bouton. Une idée de ce qui pourrait causer ça? – Maritim

Questions connexes