2016-03-31 40 views
0

class Schalter (anahtarım) yaptım ve şimdi bunu başka bir konuma sürükleyip bırakmak istiyorum. Schalter, çıktı olarak 0 veya 1 olan sadece bir nesnedir ve içinde bazı çizim vardır. Bir şey denedim ama sadece yarıya kadar çalıştı. Hareket ettiğimde çok hızlı hareket ediyor. İşte kod denedim:Sürükle ve Bırak Bir şey

namespace Schaltungszeichner { 
public partial class Form1 : Form { 
    public Form1() { 
     InitializeComponent(); 
     s = new Schalter(this); 
     this.DoubleBuffered = true; 
    } 

    private bool myMouseDown = false; 
    private int myMouseX, myMouseY; 

    Schalter s; 

    private void Form1_Paint(object sender, PaintEventArgs e) { 
     s.zeichnen(e.Graphics); 
    } 

    private void Form1_MouseMove(object sender, MouseEventArgs e) { 
     if (myMouseDown) { 
      s.X += e.X - myMouseX; 
      s.Y += e.Y - myMouseY; 
     } 
    } 

    private void Form1_MouseUp(object sender, MouseEventArgs e) { 
     myMouseDown = false; 
    } 

    private void Form1_MouseDown(object sender, MouseEventArgs e) { 
     if (s.isClicked(e.X, e.Y)) { 
      s.Out = !s.Out; 
      myMouseDown = true; 
      myMouseX = e.X; 
      myMouseY = e.Y; 

     } 
    } 
} 
} 

cevap

0

sorun MouseEventArgs olayı değil nesne taşınıyor sahibi nesneye göre fare konumunu tutan olmasıdır. Hareketli nesnenin başlangıç ​​konumunu çıkararak bunu hesaba katmanız gerekir.

yılında Form1_MouseDown değişimi:

myMouseX = e.X; 
myMouseY = e.Y; 

için:

s.X += e.X - myMouseX; 
s.Y += e.Y - myMouseY; 

için:

myMouseX = e.X - s.X; 
myMouseY = e.Y - s.Y; 

Ve değişim Form1_MouseMoveyılında

s.X = e.X - myMouseX; 
s.Y = e.Y - myMouseY; 

Ben de myMouseX ve myMouseY adlandırma dikkate alacağını differenceX ve differenceY gibi şimdi tutun değerleri yansıtan bir şey için.