2013-05-05 12 views
9

Próbuję przenieść kontrolkę o nazwie pictureBox1, przeciągając ją dookoła. Problem polega na tym, że kiedy się porusza, przesuwa się z miejsca do innego miejsca wokół myszy, ale podąża za nim ... To jest mój kod. i będę naprawdę wdzięczny, gdyby mógł mi pomócPrzenoszenie formantu przez przeciągnięcie go myszą w języku 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; 
    } 

} 

Odpowiedz

26

Wszystko, czego potrzebujesz:

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 You powinien używać angielskiego na tej stronie (przynajmniej próbuj), aby inni użytkownicy cię zrozumieli. Powiązana dyskusja: http://meta.stackexchange.com/questions/118678/how-should-we-handle-wholly-non-english-comments – astef

+0

Przykro mi, Nie zdawałem sobie sprawy, że napisałem komentarz po niemiecku . Czasami nie wiem, w jakim języku się komunikuję. Moje pytanie brzmiało, , ponieważ wydaje się, że masz dobrą znajomość tego rodzaju kodu UI, czy masz pomysł, w jaki sposób mogę płynnie przesunąć ruch przeciągniętej kontroli? Jeśli nie ma praktycznego rozwiązania z takim sposobem wdrożenia, wolę trzymać się aplikacji, ponieważ inne znalezione rozwiązania były często złe, napisane, błędne lub niepraktyczne, a twoje rozwiązanie działa teraz dobrze. – TurmDrummer

+0

@TurmDrummer Nawet jeśli mam dobrą wiedzę na ten temat (nie mam) i nawet jeśli mam pomysły o czym pytasz (nie mam), dlaczego nie stworzysz nowego pytania? – astef

2

spróbować przenieść kontrolę PictureBox przy starcie za pomocą myszki

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); 
       } 
      } 

     } 
Powiązane problemy