如何在WinForms中处理隐形控件的绘制?

时间:2012-11-27 13:05:13

标签: c# .net windows embedded compact-framework

我正在尝试在 .NET Compact Framework 中覆盖windows窗体的 OnPaint 事件。

到目前为止,我能够使用渐变,圆角矩形等绘制控件,而这些控件通常无法通过常规控件进行绘制。

但是,当我想让控件不可见时,我遇到了问题。现在,我所做的是重新绘制除了那些看不见的控件之外的所有控件。由于它需要一些时间,因此会引起一些闪烁。

有谁知道windows如何处理绘制“隐形”控件?或者你可以建议任何算法或方法来实现这一点。

2 个答案:

答案 0 :(得分:1)

你应该做几件事。

  1. 不要向OnPaint中传递给您的Graphics对象进行绘制。绘制到后台缓冲区,并将其绘制到最后的Graphics。
  2. 覆盖OnPaintBackground并让它无所事事。
  3. 只使用更改的区域,而不是整个屏幕,尽可能使裁剪区域保持较小
  4. 如果您要将单个控件更改为“不可见”,那么您将更改它并使其无效。在OnPaint中您可以进行绘图,省略基于Visibility属性的“不可见”控件。只有剪辑区域会更新。您甚至可以通过检查OnPaint上的传入剪切区域来进一步操作,并且只需要绘制逻辑绘制该区域。但这有点复杂,而且往往不是必需的。

答案 1 :(得分:0)

作为替代方案,是否可以在适当的控件上调用Invalidate()方法的任何重载来减少需要重新绘制的控件总数?