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
    }
}

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

于 2013-09-10T12:03:07.410 回答