从右到左收缩Form时,未调用面板的绘制事件?

时间:2013-09-10 11:27:24

标签: c# gdi+

我有一个Form,它有一个父面板,它有一个子面板,我使用绘图机制绘制项目,它按预期工作良好,但当我从右到左收缩我的表单时,它不会调用子面板绘制事件,如果我从左到右缩小一点并再次展开它然后它调用绘制事件,我该如何修复它? 以下是我的代码。

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

1 个答案:

答案 0 :(得分:5)

Panel类被设计成只是其他控件的容器,除了绘制背景之外,它不会做任何自己的绘画。它有点笨拙地优化了绘画,调整大小只会描绘被揭示的部分,而不是整个客户区域。

但是,您希望OnPaint始终在大小更改时运行,即使您将其缩小也是如此。从Panel派生自己的类,并在构造函数中将ResizeRedraw属性设置为true:

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

构建。从工具箱顶部删除新的Canvas控件,替换现有的面板控件。如果您不需要Panel提供的滚动支持,那么使用PictureBox可以获得两者而无需派生。