在调整表单大小时调整地图上的图片框大小

时间:2014-08-12 09:19:04

标签: c# .net resize picturebox

您好我正在创建一个地图,显示我学校的不同课程的路线

http://i.imgur.com/8A2H54Q.png

看起来像是一个带有整个地图的大型图片框并停靠在表格上,然后有很多带有红点的图片框,即位置并隐藏,直到选择了一个特定位置然后正确的位置出现并告诉房间在哪里。

现在我的问题是我希望能够调整窗体的大小,并且仍然在地图上的红点的正确位置处于完全相同的位置,只是尺寸更小,更小。因为如果我现在改变大小,它会这样做:

http://i.imgur.com/QheTSek.png

当程序运行时它也会这样做,我无法弄清楚如何制作它,以便当表格调整大小时,图片框会调整大小并在地图上占据相同的位置。

我希望有人理解这个问题,并希望提供帮助。

1 个答案:

答案 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加倍,以避免整数除法。