将对象 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;
我有一个简单的代码块,当您松开鼠标时,它会将对象捕捉到最近的 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;