1

我有一个带有图片作为应用程序背景的 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();
4

2 回答 2

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)
于 2013-03-08T23:44:58.617 回答
1

我认为你必须计算你的 x 和 y 从顶部和底部的距离之间的百分比,如果表格重新调整大小,只需使用你的 % 并再次绘制你的矩形!

例如:

x = 100 宽度是 200 所以 100 是 1/2 所以它是 50% 所以如果表格调整大小只需计算新大小和 (newsize * 50 ) / 100

希望能帮到你。

于 2013-03-08T23:42:39.900 回答