将对象的x / y值转换为int

问题描述

我有一个简单的代码块,当您将鼠标悬停时,它会将对象捕捉到最近的30/30网格。

private void pictureBox1_MouseUp(object sender,MouseEventArgs e)
{
    int gridCubeWidth = 30;
    int gridCubeHeight = 30;

    if (e.Button == System.Windows.Forms.MouseButtons.Left)
    {                                       
        double newX = Math.Round(pictureBox1.Left / (double)gridCubeWidth) * 
            (double)gridCubeWidth;

        pictureBox1.Left = (int)newX;

        double newY = Math.Round(pictureBox1.Top / (double)gridCubeHeight) * 
            (double)gridCubeHeight;

        pictureBox1.Top = (int)newY;
    }
}

这是我设法使它起作用的唯一方法,因为据我所知,pictureBox1.left / top的形式为“ Doubles”,这破坏了我的Math.Round。

我尝试将所有内容更改为Int,并在pictureBox1.Left的前面添加(Int),但这似乎并没有改变。

int newX = Math.Round((int)pictureBox1.Left / gridCubeWidth) * gridCubeWidth;
pictureBox1.Left = newX;

我觉得我正在做的事情有些多余,将所有内容都转换为Doubles,然后再转换为Int,并且实现这一目标的方法要简单得多。

我的主要问题是,为什么(int)pictureBox1.Left似乎没有将此值转换为Int

解决方法

Left和Top属性是整数。我不明白为什么你需要加倍。看到这里:https://docs.microsoft.com/en-us/dotnet/api/system.windows.forms.control.left?view=netframework-4.8

您应该能够像这样进行四舍五入:int left = (pictureBox1.Left / 30) * 30;

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...