我试图覆盖 .NET Compact Framework 中窗口窗体的 OnPaint 事件。
到目前为止,我已经能够绘制带有渐变、圆角矩形等的控件,而这通常是常规控件无法实现的。
但是,当我想让控件不可见时,我遇到了问题。现在,我所做的是重新绘制除那些不可见控件之外的所有控件。由于这需要一些时间,因此会导致一些闪烁。
有谁知道 Windows 如何处理绘制“不可见”控件?或者你能建议任何算法或方法来实现这一点。
最佳答案
您应该做几件事。
- 不要直接在
OnPaint
中向您提供的 Graphics 对象上绘画。绘制到后台缓冲区,最后将其绘制到图形。 - 覆盖
OnPaintBackground
并让它不执行任何操作。 - 尽可能只使发生变化的区域无效,而不是整个屏幕,以保持裁剪区域较小
如果您要将单个控件更改为“不可见”,那么您将更改它并使它的边界矩形无效。在 OnPaint
中,您将进行绘图,省略基于 Visibility 属性的“不可见”控件。只有裁剪区域会被更新。您甚至可以更进一步,通过检查 OnPaint
上的传入裁剪区域,并且只费心做绘制逻辑来绘制该区域。不过这有点复杂,而且通常不是必需的。
关于c# - WinForms 中如何处理不可见控件的绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584912/