0

親パネルを持つフォームがあり、描画メカニズムを使用してアイテムを描画している子パネルがあり、期待どおりに機能しますが、フォームを右から左に縮小すると、子パネルのペイントが呼び出されませんイベント中、左から右に少し縮小して再び広げると、ペイントイベントが呼び出されますが、どうすれば修正できますか? 以下は私のコードです。

  private void canvas_Paint(object sender, PaintEventArgs e)
        {
            drawString(e);
            this.Invalidate();
            //this.Refresh();
            //this.Update();


        }

        private void drawString(PaintEventArgs e)
        {

            System.Drawing.Drawing2D.LinearGradientBrush myBrush = new System.Drawing.Drawing2D.LinearGradientBrush(ClientRectangle, Color.Red, Color.Yellow, System.Drawing.Drawing2D.LinearGradientMode.Horizontal);
            cBasketItemHelper objHelper = new cBasketItemHelper() { CanvasWidth = this.canvas.Width, CanvasHeight = this.canvas.Height, X = 3, Y = 3 };
            objHelper.myBrush = myBrush;
            objHelper.currOrder = Program.currOrder;
            objHelper.g = e.Graphics;//this.canvas.();//this.canvas.Graphics;
            objHelper.DrawBasketItems();
            e.Dispose();
        }
4

1 に答える 1

5

Panel クラスは、他のコントロールの単なるコンテナーとして設計されました。背景を描画する以外に独自の描画を行うことは想定されていません。サイズ変更は、クライアント領域全体ではなく、表示された部分のみをペイントします。

ただし、サイズを小さくした場合でも、サイズが変更されたときに常に OnPaint を実行する必要があります。Panel から独自のクラスを派生させ、コンストラクターで ResizeRedraw プロパティを true に設定します。

class Canvas {
    public Canvas() {
        this.ResizeRedraw = true;
        this.DoubleBuffered = true;   // extra goodie
    }
}

建てる。ツールボックスの上部から新しいキャンバス コントロールをドロップして、既存のパネル コントロールを置き換えます。Panel が提供するスクロール サポートが必要ない場合は、PictureBox を使用すると、派生する必要なく両方を取得できます。

于 2013-09-10T12:03:07.410 に答える