1

アプリケーションの背景として画像を含む 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();
4

2 に答える 2

3

1 つのオプションは、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 の距離の間の % を計算する必要があると思います。フォームのサイズが変更された場合は、% を使用して rect を再度描画します。

例:

x = 100 幅は 200 なので 100 は 1/2 なので 50% フォームのサイズが変更された場合、新しいサイズと (newsize * 50 ) / 100 を計算するだけです

それがあなたを助けることを願っています。

于 2013-03-08T23:42:39.900 に答える