我正在尝试创建一个简单的应用程序,通过网络发送鼠标输入,以使用C#和.NET Framework 4.5远程控制另一台计算机
当我尝试在MouseMove事件中计算鼠标光标增量移动时,我遇到了一个奇怪的问题:下面是我为隔离此问题而做的示例代码:
public partial class Form1 : Form
{
private Point previousPosition;
public Form1()
{
InitializeComponent();
previousPosition = MousePosition;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Point mousePos = MousePosition;
int deltaX = (mousePos.X - previousPosition.X);
int deltaY = (mousePos.Y - previousPosition.Y);
label1.Text = "X: " + deltaX.ToString() + " Y: " + deltaY.ToString();
label2.Text = "previousX: " + previousPosition.X + " currentX: " + mousePos.X;
previousPosition = MousePosition;
}
}
我将前一个光标位置存储在类变量中,而在MouseMove事件中我计算位置差异并更新previousPosition变量。
现在奇怪的是,这只适用于正增量(当我将鼠标向右移动时)。
我在表格中放置了一些标签以实时显示坐标,令我惊讶的是,当我向左移动光标时,前一个坐标和当前坐标始终保持不变,从而产生零三角形!
我在这里错过了一些愚蠢而明显的东西吗?当我向左移动光标时,为什么previousPosition变量等于MousePosition,但是当向右移动时,它按预期工作?
答案 0 :(得分:4)
我复制了您的问题,并通过在代码中添加对重复移动事件的检查来修复它:
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
Point mousePos = MousePosition;
if (mousePos == previousPosition)
return;
// .. your other code here
previousPosition = mousePos;
}
我不确定为什么只有向左移动时,同一位置才会有多个鼠标移动事件。