2013-09-06 2 views
1

J'ai une application de jeu de cartes, et je veux créer une animation simple qui fera bouger le bouton quand il est clicked and dragged.Déplacement de bouton simple

J'ai essayé:

bool _Down = false; 

    private void button1_MouseDown(object sender, MouseEventArgs e) 
    { 
     _Down = true; 
    } 

    private void button1_MouseUp(object sender, MouseEventArgs e) 
    { 
     _Down = false; 
     button1.Location = e.Location; 
    } 

    private void button1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (_Down) 
     { 
      button1.Location = e.Location; 
     } 
    } 

Cela ne fonctionne pas non plus. L'effet que je reçois est que lorsque le bouton est cliqué et déplacé, le bouton n'est pas visible jusqu'à ce que la souris est relâchée, et aussi, le bouton ne reste pas réellement à l'emplacement de la souris.

J'ai aussi essayé:

bool _Down = false; 

    private void button1_MouseDown(object sender, MouseEventArgs e) 
    { 
     _Down = true; 
    } 

    private void button1_MouseUp(object sender, MouseEventArgs e) 
    { 
     _Down = false; 
     button1.Location = Cursor.Position; 
    } 

    private void button1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (_Down) 
     { 
      button1.Location = Cursor.Position; 
     } 
    } 

Cela fonctionne mieux que le premier que le bouton est visible lorsqu'il est déplacé et arrête à la position de la souris, mais le seul problème est que Cursor.Position retourne la position du curseur dans relativité à la écran, pas la forme donc. Le bouton ne bouge pas à la vitesse du curseur.

Que puis-je faire pour obtenir ce que je veux?

Répondre

2

Moving Control lors de l'exécution est très facile:

Point downPoint; 
private void button1_MouseDown(object sender, MouseEventArgs e) 
{ 
    downPoint = e.Location; 
} 
private void button1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) { 
     button1.Left += e.X - downPoint.X; 
     button1.Top += e.Y - downPoint.Y; 
    } 
} 
+0

Parfait !!!!!!!!!!!!! –

0

Essayez cette

private void button1_MouseUp(object sender, MouseEventArgs e) 
{ 
    _Down = false; 
    button1.Location = PointToClient(Cursor.Position); 
} 

private void button1_MouseMove(object sender, MouseEventArgs e) 
{ 
    if (_Down) 
    { 
     button1.Location = PointToClient(Cursor.Position); 
    } 
} 
+0

Merci. Ca marche mais un peu mal fonctionne –

Questions connexes