C# 调整PictureBox大小时如何移动矩形

C# 调整PictureBox大小时如何移动矩形,c#,graphics,C#,Graphics,我有一个PictureBox,其中有一张图片作为应用程序的背景,设置了所有锚点,因此它可以根据表单调整大小。在这个PictureBox上,我正在创建许多其他的东西,目前只有矩形。我在一些X和Y坐标上创建它们,这很好。添加图片以显示我正在尝试做的事情。创建的矩形实际上是浅蓝色的小正方形。 但是,当我调整窗体的大小时,例如,我将其最大化,矩形将保持在相同的坐标上,这当然会在此时的其他位置,仅包括图像的一部分以节省空间: 我的问题是-在调整大小的过程中,如何使矩形保持不变?注意-它们必须在以后移动,

我有一个PictureBox,其中有一张图片作为应用程序的背景,设置了所有锚点,因此它可以根据表单调整大小。在这个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();

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

例如:

x=100宽度是200,所以100是1/2,所以它是50%,所以如果表单调整了大小,只需计算新的大小和新闻大小*50/100


希望能对你有所帮助

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

例如:

x=100宽度是200,所以100是1/2,所以它是50%,所以如果表单调整了大小,只需计算新的大小和新闻大小*50/100


希望能对你有所帮助

一个选项是在与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)

一个选项是以新坐标重新绘制矩形,该坐标与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)

挂钩到调整大小事件,并在每次启动调整大小时重新计算,怎么样?同时复制粘贴设置矩形位置的代码。重要的是要看到相对于你设置的位置是用坐标的绝对值设置的。将在一秒钟内添加一些代码。但绝对值是什么?绝对到窗口还是到屏幕?画画的方法有很多。到画框。我正在PictureBox中设置坐标。顺便说一句,使用枚举,而不是严格键入的代码。是否挂接到调整大小事件,并在每次触发调整大小时重新计算?同时复制粘贴设置矩形位置的代码。重要的是要看到相对于你设置的位置是用坐标的绝对值设置的。将在一秒钟内添加一些代码。但绝对值是什么?绝对到窗口还是到屏幕?画画的方法有很多。到画框。我在PictureBox中设置坐标。顺便说一句,使用枚举,而不是严格类型的代码。实际上,在我的情况下,这比百分比建议更有用。谢谢!实际上,在我的情况下,这比百分比建议更有用。谢谢!