您好我正在创建一个地图,显示我学校的不同课程的路线
http://i.imgur.com/8A2H54Q.png
看起来像是一个带有整个地图的大型图片框并停靠在表格上,然后有很多带有红点的图片框,即位置并隐藏,直到选择了一个特定位置然后正确的位置出现并告诉房间在哪里。
现在我的问题是我希望能够调整窗体的大小,并且仍然在地图上的红点的正确位置处于完全相同的位置,只是尺寸更小,更小。因为如果我现在改变大小,它会这样做:
http://i.imgur.com/QheTSek.png
当程序运行时它也会这样做,我无法弄清楚如何制作它,以便当表格调整大小时,图片框会调整大小并在地图上占据相同的位置。
我希望有人理解这个问题,并希望提供帮助。
答案 0 :(得分:0)
为此,您需要重新计算点图片框相对于调整地图图片框大小的位置。
作为起点,您需要点图片框的旧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加倍,以避免整数除法。