我有一个表格,它有一个父面板,它有一个子面板,我使用绘图机制绘制项目,它按预期工作良好,但当我从右到左收缩我的表格时,它不会调用子面板油漆事件,如果我从左到右缩小一点并再次传播它然后它调用paint事件,我该如何解决它?以下是我的代码.
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();
}
Run Code Online (Sandbox Code Playgroud)
Panel类被设计成只是其他控件的容器,除了绘制背景之外,它不会做任何自己的绘画.有点笨拙地优化了绘画,调整大小只画出被揭示的部分,而不是整个客户区域.
但是,您希望OnPaint始终在大小更改时运行,即使您将其缩小也是如此.从Panel派生自己的类,并在构造函数中将ResizeRedraw属性设置为true:
class Canvas {
public Canvas() {
this.ResizeRedraw = true;
this.DoubleBuffered = true; // extra goodie
}
}
Run Code Online (Sandbox Code Playgroud)
建立.从工具箱顶部删除新的Canvas控件,替换现有的面板控件.如果您不需要Panel提供的滚动支持,那么使用PictureBox可以获得两者而无需派生.
| 归档时间: |
|
| 查看次数: |
700 次 |
| 最近记录: |