c# - WinForms 中如何处理不可见控件的绘制?

标签 c# .net windows embedded compact-framework

我试图覆盖 .NET Compact Framework 中窗口窗体的 OnPaint 事件。

到目前为止,我已经能够绘制带有渐变、圆角矩形等的控件,而这通常是常规控件无法实现的。

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

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

最佳答案

您应该做几件事。

  1. 不要直接在 OnPaint 中向您提供的 Graphics 对象上绘画。绘制到后台缓冲区,最后将其绘制到图形。
  2. 覆盖 OnPaintBackground 并让它不执行任何操作。
  3. 尽可能只使发生变化的区域无效,而不是整个屏幕,以保持裁剪区域较小

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

关于c# - WinForms 中如何处理不可见控件的绘制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13584912/

相关文章:

javascript - 在 .Net ApiController 中启动文件下载

c# - DevExpress Windows 窗体的文件上传控件

c++ - 如何在 main() 之前调试程序崩溃

c++ - dumpbin 导出输出中的@number 是什么

windows - 如何在 Windows 任务计划程序上安排 azcopy?

c# - 在 C# 中将回调机制实现为异步/等待模式

c# - 删除结束元素的空间?

c# - 在 C# 中进行按位运算时,除了 x64 或 x86 之外,我还需要考虑 CPU 吗?

c# - AssemblyInfo.cs 中的 assembly 关键字是什么意思。它允许在内部使用方法吗?

c# - ANTLR4 C# 运行时解析速度极慢