可能重复:
How do I suspend painting for a control and its children?
Winforms Double Buffering
我有一个表单,它绘制了一堆用户定义的控件(其中81个),每个控件包含另外10个控件(总共8,100个ish)。这一切似乎都是按顺序绘制的(需要大约1秒左右)。
我查看了these two个问题,并按照其他方式进行了调整(在表单和自定义控件上设置了this.DoubleBuffered = true
,并在表单上设置了SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.AllPaintingInWmPaint, true);
,但这似乎没有做任何事情。
有没有办法保存表单的绘图功能,将其保存在委托中,交换虚拟函数,以便表格不会重新绘制,然后将实际函数放回并触发它。 / p>
我认为有一种更标准的方法可以做到这一点,但我无法找到它(那些只是处理布局逻辑的SuspendLayout
/ ResumeLayout
。)
我该怎么做?
答案 0 :(得分:1)
这就是答案:(a link)。
但想一想。如果您阻止发生Paint
,那么当用户与其进行交互时,应如何更新UI控件?没有按钮发光,没有文本框光标闪烁等等。
如果您对此感到满意,那么为什么您不将RenderToBitmap
用户控件的容器作为其背景图像?...