2013-05-05 22 views
9

Sto provando a spostare il controllo denominato pictureBox1 trascinandolo. Il problema è che, quando si muove, continua a spostarsi da una posizione a un'altra posizione intorno al mouse, ma lo segue ... Questo è il mio codice. e sarei davvero grato se si potesse aiutarmiSpostare un controllo trascinandolo con il mouse in C#

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 
    bool selected = false; 
    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     selected = true; 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (selected == true) 
     { 
      pictureBox1.Location = e.Location; 
     } 
    } 

    private void pictureBox1_MouseUp(object sender, MouseEventArgs e) 
    { 
     selected = false; 
    } 

} 

risposta

26

Tutto ciò che serve:

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 


    private Point MouseDownLocation; 


    private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      MouseDownLocation = e.Location; 
     } 
    } 

    private void pictureBox1_MouseMove(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Left) 
     { 
      pictureBox1.Left = e.X + pictureBox1.Left - MouseDownLocation.X; 
      pictureBox1.Top = e.Y + pictureBox1.Top - MouseDownLocation.Y; 
     } 
    } 

} 
+0

@TurmDrummer È dovresti usare l'inglese su questo sito (almeno provare) per far capire agli altri utenti. Discussione correlata: http://meta.stackexchange.com/questions/118678/how-should-we-handle-wholly-non-english-comments – astef

+0

Mi dispiace, Non mi ero reso conto, che ho scritto il mio commento in tedesco . A volte non sono a conoscenza di quale lingua sto comunicando. La mia domanda è stata, dal momento che sembra che tu abbia una buona conoscenza con questo tipo di codice UI, hai un'idea di come avrei potuto smussare un po 'il movimento del controllo trascinato? Se non c'è una soluzione pratica con questo modo di implementare, preferisco attenermi al tuo approccio, perché le altre soluzioni che ho trovato erano spesso scritte male, imperfette o poco pratiche e la tua soluzione funziona bene adesso. – TurmDrummer

+0

@TurmDrummer Anche se ho una buona conoscenza di questo (non ho), e anche se ho delle idee su cosa stai chiedendo (non ho), perché non crei una nuova domanda? – astef

2

Provate a spostare controllo PictureBox in fase di esecuzione utilizzando il mouse

private void pictureBox7_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       xPos = e.X; 
       yPos = e.Y; 
      } 
     } 

     private void pictureBox7_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) 
     { 
      PictureBox p = sender as PictureBox; 

      if (p != null) 
      { 
       if (e.Button == MouseButtons.Left) 
       { 
        p.Top += (e.Y - yPos); 
        p.Left += (e.X - xPos); 
       } 
      } 

     }