1

可能重复:
如何暂停控件及其子项的绘制?
Winforms 双缓冲

我有一个表格,它绘制了一堆用户定义的控件(其中 81 个),每个控件都包含另外 10 个控件(总共 8,100 个)。这一切似乎都是按顺序绘制的(大约需要 1 秒左右)。

我已经查看了 两个问题,并遵循了 ier 建议(this.DoubleBuffered = true在表单和自定义控件以及SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);表单上设置,但这似乎没有做任何事情。

有没有办法保存表单的绘制函数,将其保存在委托中,交换虚拟函数,以便表单根本不会重绘,然后将真实函数放回并触发它。

我认为有一种更标准的方法可以做到这一点,但我找不到它(它不是SuspendLayout/ResumeLayout那些只处理布局逻辑的)。

我怎样才能做到这一点?

4

1 回答 1

1

这就是答案:(链接)。

但是想想。如果您阻止Paint发生,当用户与它们交互时应该如何更新您的 UI 控件?不会有按钮发光,没有文本框光标闪烁等等。

如果您对此感到满意,那么为什么您不RenderToBitmap将用户控件的容器用作其背景图像?...

于 2012-11-04T20:58:36.983 回答