我有一个PictureBox,图片作为应用程序的背景,设置了所有的Anchors,因此可以使用表单调整大小。在这个PictureBox上,我正在创建许多其他东西,现在只有矩形。我在一些X和Y坐标上创建它们,这很好。添加图片以显示我想要做的事情。创建的矩形实际上是浅蓝色的小方块。
但是,当我调整表单的大小时,例如我最大化它,矩形保持在相同的坐标,当然在此处的其他位置(仅包括图像的一部分以节省空间): 我的问题是 - 在调整大小期间,如何使矩形“棒”与原样相同?注意 - 它们必须稍后移动,例如每2秒左右,所以它不能绝对静止。
编辑: 这里是一些创建矩形的代码
private void button1_Click(object sender, EventArgs e)
{
spawn = "aircraft";
pictureBox1.Invalidate();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
switch (spawn)
{
case "aircraft":
Point[] points = new Point[2];
Point bod = new Point(750, 280);
points[0] = bod;
aircraft letadlo = new aircraft(605, 180, "KLM886", 180, e.Graphics);
aircrafts[0] = letadlo;
letadlo.points = points;
break;
...
public aircraft(int x, int y, string csign, int spd, Graphics g)
{
Pen p = new Pen(Color.Turquoise, 2);
Rectangle r = new Rectangle(x, y, 5, 5);
g.DrawRectangle(p, r);
p.Dispose();
答案 0 :(得分:3)
一个选项可能是在新坐标中重绘矩形,该矩形与PictureBox更改的大小成比例。 例如:
oldX, oldY // old coordinates of the rectangle should be saved
oldPictureBoxWidth, oldPictureBoxHeight // should be saved too
//and on the PictureBox Paint event You have the new:
newPictureBoxWidth and newPictureBoxHeight
//the new coordinates of rectangle: (resize ratio is in brackets)
newX = oldX * (newPictureBoxWidth / oldPictureBoxWidth)
newY = oldY * (newPictureBoxHeight / oldPictureBoxHeight)
答案 1 :(得分:1)
我认为你必须计算你的x和y距离顶部和底部的距离之间的百分比,如果表单重新调整大小只是使用你的%并再次绘制你的矩形!
代表:
x = 100,宽度为200,因此100为1/2,因此为50%因此,如果调整表格大小只计算新尺寸并且(newsize * 50)/ 100
希望能帮助你。