我正在尝试在 .NET Compact Framework 中覆盖windows窗体的 OnPaint 事件。
到目前为止,我能够使用渐变,圆角矩形等绘制控件,而这些控件通常无法通过常规控件进行绘制。
但是,当我想让控件不可见时,我遇到了问题。现在,我所做的是重新绘制除了那些看不见的控件之外的所有控件。由于它需要一些时间,因此会引起一些闪烁。
有谁知道windows如何处理绘制“隐形”控件?或者你可以建议任何算法或方法来实现这一点。
答案 0 :(得分:1)
你应该做几件事。
OnPaint
中传递给您的Graphics对象进行绘制。绘制到后台缓冲区,并将其绘制到最后的Graphics。OnPaintBackground
并让它无所事事。如果您要将单个控件更改为“不可见”,那么您将更改它并使其无效。在OnPaint
中您可以进行绘图,省略基于Visibility属性的“不可见”控件。只有剪辑区域会更新。您甚至可以通过检查OnPaint
上的传入剪切区域来进一步操作,并且只需要绘制逻辑绘制该区域。但这有点复杂,而且往往不是必需的。
答案 1 :(得分:0)
作为替代方案,是否可以在适当的控件上调用Invalidate()方法的任何重载来减少需要重新绘制的控件总数?