将对象 x/y 值转换为 int

Converting an objects x/y value into an 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 是“双打”的形式,这打破了我的 Math.Round。

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

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

我觉得我正在做的事情有些多余,将所有内容都转换为 Double,然后再转换回 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;