如何在 WinForms 中处理不可见控件的绘制



>我正在尝试覆盖.NET Compact Framework中Windows表单的OnPaint事件。

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

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

有谁知道窗口如何处理绘制"隐形"控件?或者你能建议任何关于如何实现这一目标的算法或方法吗?

你应该有几件事在做。

  1. 不要直接绘制到OnPaint中交给您的图形对象。 绘制到后台缓冲区,并将其绘制到末尾的图形。
  2. 覆盖OnPaintBackground,让它不执行任何操作。
  3. 尽可能仅使更改的区域(而不是整个屏幕)无效,以保持剪切区域较小

如果要将单个控件更改为"不可见",则可以更改它并使它的边界矩形无效。 在OnPaint,您将进行绘图,省略基于 Visibility 属性的"不可见"控件。 只有剪切区域才会更新。 您甚至可以更进一步,检查OnPaint上的传入剪切区域,并且只费心做绘制逻辑绘制该区域。 不过,这有点复杂,通常不是必需的。

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

最新更新