防止油漆被多次调用

时间:2012-11-04 20:35:48

标签: c# winforms drawing

  

可能重复:
  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。)

我该怎么做?

1 个答案:

答案 0 :(得分:1)

这就是答案:(a link)。

但想一想。如果您阻止发生Paint,那么当用户与其进行交互时,应如何更新UI控件?没有按钮发光,没有文本框光标闪烁等等。

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