c# - Windows 窗体计算增量鼠标移动负值

标签 c# winforms mousemove

我正在尝试创建一个简单的应用程序,以使用 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,但当向右移动时它按预期工作?

最佳答案

我复制了你的问题,并通过在代码中添加对重复移动事件的检查来修复它:

private void Form1_MouseMove(object sender, MouseEventArgs e)
{
    Point mousePos = MousePosition;

    if (mousePos == previousPosition)
        return;

    // .. your other code here        

    previousPosition = mousePos;
}

我不确定为什么只有向左移动时同一位置才会有多个鼠标移动事件。

关于c# - Windows 窗体计算增量鼠标移动负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23047996/

相关文章:

jquery - 滚动顶部和滚动左摇晃

c# - 无法在 list 资源中找到报表 - Crystal Report/C#

c# - 为什么 Context.User.Identity.Name 在 Windows Form Hub 上下文中为空?

javascript - 添加 View 框时鼠标位置发生变化

java - mouseMoved 未调用,而 mousePressed 已调用

c# - 在 Windows 窗体应用程序中使用 Console.WriteLine

c# - 窗体 : Multiple Threads Updating UI at Same Time

c# - 如何根据条件使用 FROM..SELECT 选择 Linq 元素?

c# - 如何在没有 Visual Studio 的机器上设置远程调试

c# - 将 SQL 语句转换为 LINQ-To-SQL