拖放一些东西
Drag and Drop something
我做了一个 class Schalter
(eng.switch),现在我想把它拖放到另一个位置。 Schalter
只是一个输出为 0 或 1 的对象,其中有一些绘图。我尝试了一些东西,但只奏效了一半。当我移动它时,它移动得太快了。
这是我试过的代码:
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;
}
}
}
}
问题是 MouseEventArgs 保持鼠标位置 相对于拥有事件的对象 而不是被移动的对象。您需要通过减去移动对象的起始位置来考虑这一点。
在Form1_MouseDown中更改:
myMouseX = e.X;
myMouseY = e.Y;
至:
myMouseX = e.X - s.X;
myMouseY = e.Y - s.Y;
并在 Form1_MouseMove 中更改:
s.X += e.X - myMouseX;
s.Y += e.Y - myMouseY;
至:
s.X = e.X - myMouseX;
s.Y = e.Y - myMouseY;
我还会考虑将 myMouseX 和 myMouseY 重命名为反映它们现在持有的值的名称,例如 differenceX and differenceY.
我做了一个 class Schalter
(eng.switch),现在我想把它拖放到另一个位置。 Schalter
只是一个输出为 0 或 1 的对象,其中有一些绘图。我尝试了一些东西,但只奏效了一半。当我移动它时,它移动得太快了。
这是我试过的代码:
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;
}
}
}
}
问题是 MouseEventArgs 保持鼠标位置 相对于拥有事件的对象 而不是被移动的对象。您需要通过减去移动对象的起始位置来考虑这一点。
在Form1_MouseDown中更改:
myMouseX = e.X;
myMouseY = e.Y;
至:
myMouseX = e.X - s.X;
myMouseY = e.Y - s.Y;
并在 Form1_MouseMove 中更改:
s.X += e.X - myMouseX;
s.Y += e.Y - myMouseY;
至:
s.X = e.X - myMouseX;
s.Y = e.Y - myMouseY;
我还会考虑将 myMouseX 和 myMouseY 重命名为反映它们现在持有的值的名称,例如 differenceX and differenceY.