2013-05-05 11 views
9

Ich versuche, das Steuerelement namens pictureBox1 durch Ziehen verschieben. Das Problem ist, wenn es sich bewegt, bewegt es sich von einem Ort zu einem anderen Ort um die Maus, aber es folgt ihm ... Das ist mein Code. und ich würde es wirklich schätzen, wenn Sie mir helfen könntenVerschieben eines Steuerelements durch Ziehen mit der Maus 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; 
    } 

} 

Antwort

26

Alles, was Sie brauchen:

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 Sie sollte Englisch auf dieser Seite verwenden (zumindest versuchen), damit andere Benutzer Sie verstehen. Verwandte Diskussion: http://meta.stackexchange.com/questions/118678/how-should-we-handle-wholly-non-english-comments – astef

+0

Es tut mir leid, Ich hatte nicht erkannt, dass ich meinen Kommentar auf Deutsch geschrieben habe . Manchmal weiß ich nicht, in welcher Sprache ich kommuniziere. Meine Frage war, da Sie scheinen, ein gutes Wissen mit dieser Art von UI-Code haben, haben Sie eine Idee, wie ich die Bewegung der gezogenen Kontrolle ein wenig glätten könnte? Wenn es keine praktische Lösung mit dieser Art der Implementierung gibt, bleibe ich eher bei Ihrem Ansatz, weil die anderen Lösungen, die ich gefunden habe, oft schlecht geschrieben, fehlerhaft oder unpraktisch waren und Ihre Lösung jetzt gut funktioniert. – TurmDrummer

+0

@TurmDrummer Auch wenn ich das gut kenne (ich habe nicht), und selbst wenn ich Ideen habe, worüber du fragst (ich habe nicht), warum stellst du keine neue Frage auf? – astef

2

dies versuchen PictureBox-Steuerelement zur Laufzeit zu bewegen Maus

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

     } 
Verwandte Themen