当窗体调整大小时,在地图上调整图片框的大小
本文关键字:调整 窗体 小时 地图 | 更新日期: 2023-09-27 18:17:40
你好,我正在创建一个地图,它显示了到学校不同班级的路线
https://i.stack.imgur.com/3SnUc.png它看起来像这样,有一个大的图片框包含整个地图,并停靠到窗体上,然后有很多带有红点的图片框,这是位置和隐藏,直到一个特定的位置被选中,然后正确的一个将显示并告诉房间在哪里。
现在我的问题是,我想有能力调整大小的形式,仍然有红点在地图上的正确位置在完全相同的地方,只是一个更大的尺寸和更小的。因为如果我现在改变大小它会这样做
https://i.stack.imgur.com/CKKdo.png当程序运行时,它做同样的事情,我不知道如何使它,所以当窗体调整大小时,图片框会调整大小,并在地图上占据相同的位置。
我希望有人能理解这个问题并愿意帮忙。
要做到这一点,你需要重新计算点图片框相对于地图图片框大小的位置。
作为起点,你需要你的点图片框的旧的x和y的位置,以及你的地图图片框的高度和宽度,因为他们在调整大小生效之前。
调整大小后,你应该有新的宽度和高度的地图图片框。
从这里你可以计算缩放比例,你需要计算点图片框的新位置。
大致如下:
newDotXPosition = oldDotXPosition * (newMapWidth / oldMapWidth)
newDotYPosition = oldDotYPosition * (newMapHeigth / oldMapHeight)
点状图片框的大小可以相应地处理。
这是我的工作代码,我提取了相关部分:
private int oldXPosition;
private int oldYPosition;
private double oldMapWidth;
private double oldMapHeight;
public Form1()
{
//stuff, etc
oldXPosition = pictureBox2.Location.X;
oldYPosition = pictureBox2.Location.Y;
oldMapWidth= Width;
oldMapHeight = Height;
}
private void Form1_Resize(object sender, EventArgs e)
{
int newXPosition = (int)(oldXPosition * (Width / oldMapWidth));
int newYPosition = (int)(oldYPosition * (Height / oldMapHeight));
pictureBox1.Location = new Point(newXPosition, newYPosition);
}
就是这样。仅此而已。我将oldMapWidth/Height设置为double,以避免整数分割。