我刚刚编写了一些简单的代码来跟踪鼠标从鼠标移动到PictureBox中鼠标移动的当前位置的偏移量。我正在输出差异到标签,它工作正常。
所以说我在X:20 Y:20然后将鼠标向左移动5.我的结果是X:15 Y:20。
现在问题是当我获取这些结果(diffX和diffY)并将它们添加到整数(testOne和testTwo)时。结果呈指数级不同。
最相关的是当我将鼠标保持在相同位置而不移动它而只是按住按钮时。结果继续增加。
我已将问题减少到以下代码:
Point startPoint = new Point();
bool dragging = false;
int testOne = 30;
int testTwo = 30;
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (dragging)
{
int diffX = (pictureBox1.PointToClient(e.Location).X - startPoint.X);
int diffY = (pictureBox1.PointToClient(e.Location).Y - startPoint.Y);
label9.Text = diffX.ToString(); //Works, shows desired result
label10.Text = diffY.ToString(); //also works fine
testOne = (testOne + diffX); //Issue here
testTwo = (testTwo + diffY); //and here
label11.Text = (testOne).ToString(); //Unexpected results output
label12.Text = (testTwo).ToString();
}
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
if (!dragging) //Incase the mouse down was repeating, it's not
{
startPoint = pictureBox1.PointToClient(e.Location);
dragging = true;
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
if (dragging)
dragging = false;
}
我在VS 2008中使用C#WinForms,Framework 3.5
任何见解都会很棒,也许这是一个错误,或者我只是忽略了一些简单的事情。任何想法或者你是否可以重新制作。
干杯
克雷格
答案 0 :(得分:2)
看起来好像是从起点减去当前点,而不是最后一点。将startPoint设置为mousemove函数末尾的当前点。
startPoint = pictureBox1.PointToClient(e.Location);
答案 1 :(得分:0)
如果您不移动鼠标,则不应该获取MouseMove事件...同时单击鼠标按钮将向您发送MouseMove。在一般情况下,MouseMove会在看似实用的时候发送,你也应该准备好处理0次动作。
testOne和testTwo的值测量“所有鼠标移动的总和”,只要鼠标偏移(diffX / Y)为正(这基本上是mose移动的积分),它就会增长。你对这个价值观的期望是什么?