我有一个包含自定义控件和标准控件的自定义控件。当控件变大时,在子控件的绘制完成之前,我将在子控件的绘制位置绘制背景颜色的矩形。这对于我的自定义控件和标准控件都是一样的。
我认为挂起布局是避免这种情况的一种方法,但它对我不起作用。
在调整大小时,我挂起了容器及其所有控件的布局。
是否需要重写子控件的paint方法?当然,这意味着新的自定义控件将替换所有的标准控件,或者我是否需要覆盖容器的paint方法?
发布于 2011-03-06 20:55:42
编辑以更正信息和参考
一种方法是加倍缓冲。人们经常设置这种风格,并假设它是有效的,但实际上,由于各种原因,你可能得不到双缓冲。但是真正的双缓冲也会有一些负面的后果。
Hans Passant提供的以下解决方案通常会修复此类问题,而不会导致双缓冲的一些副作用。
label backgrond flicking on a WinForms user control has background image enabled
通过删除WS_CLIPCHILDREN属性,控件应该占据的空间将首先填充背景,这可以减少您看到的等待控件绘制的工件
将以下代码添加到您的自定义控件:
protected override CreateParams CreateParams
{
get
{
CreateParams parms = base.CreateParams;
parms.Style &= ~0x02000000; // Turn off WS_CLIPCHILDREN
return parms;
}
}https://stackoverflow.com/questions/5210410
复制相似问题