How to make a rectangle move when PictureBox is re

2019-07-25 11:51发布

问题:

I have a PictureBox with a picture as a background of an application, having all the Anchors set, so it can resize with the form. On this PictureBox, I am creating many other things, for now only rectangles. I am creating them on some X and Y coordinates, that is fine. Adding a picture to show what I am trying to do. Created rectangle is actually the little light blue square.

But, when i resize the form, for example I maximize it, the rectangle stays at the same coordinates, which of course ar somewhere else at the moment (including only part of image to save space): My question is - how can i make the rectangle "stick" with the same place as it is, during the resize? Note - they will have to move later, like every 2 seconds or so, so it cant be absolutely static.

EDIT: here is some of the code creating the rectangle

        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();

回答1:

One option could be to redraw the rectangle in new coordinates which are proportional to the PictureBox changed size. For example:

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)


回答2:

i think you have to calculate the % between the distance of your x and y from the top and the bottom , and if the form re-sized just use your % and draw again your rect !

for ex :

x = 100 the width is 200 so 100 is 1/2 so it 50% So if the form resized just calculate the new size and (newsize * 50 ) / 100

Hope that can help you .



标签: c# graphics