代码之家  ›  专栏  ›  技术社区  ›  Sharpy

拖放某物

  •  0
  • Sharpy  · 技术社区  · 9 年前

    我做了一个 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;
    
            }
        }
    }
    }
    
    1 回复  |  直到 9 年前
        1
  •  0
  •   user6142149 user6142149    9 年前

    问题是MouseEventArgs保持鼠标位置 相对于拥有事件的对象 而不是正在移动的对象。您需要通过减去移动对象的起始位置来说明这一点。

    在里面 窗体1_鼠标向下 更改:

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

    收件人:

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

    而在 窗体1_鼠标移动 更改:

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

    收件人:

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

    我也会考虑重命名 我的鼠标X 我的鼠标Y 反映他们现在持有的价值观,比如 差异X 差异Y .