我有一个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();
}
答案 0 :(得分:5)
Panel类被设计成只是其他控件的容器,除了绘制背景之外,它不会做任何自己的绘画。它有点笨拙地优化了绘画,调整大小只会描绘被揭示的部分,而不是整个客户区域。
但是,您希望OnPaint始终在大小更改时运行,即使您将其缩小也是如此。从Panel派生自己的类,并在构造函数中将ResizeRedraw属性设置为true:
class Canvas {
public Canvas() {
this.ResizeRedraw = true;
this.DoubleBuffered = true; // extra goodie
}
}
构建。从工具箱顶部删除新的Canvas控件,替换现有的面板控件。如果您不需要Panel提供的滚动支持,那么使用PictureBox可以获得两者而无需派生。