【发布时间】:2011-11-26 00:51:50
【问题描述】:
可以通过将“AllPaintingInWmPaint”、“UserPaint”和“DoubleBuffer”ControlStyles 的值设置为“true”(this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true)) 来对整个表单进行双重缓冲。
但这不能发生在 System.Windows.Forms.Panel 上,因为该类不允许我这样做。我找到了一种解决方案:http://bytes.com/topic/c-sharp/answers/267635-double-buffering-panel-control。我也试过这个:Winforms Double Buffering。它很滞后,即使它用于小型绘图,我也有一些自定义资源用于表单和其他东西,因此我不会将整个表单变成一张绘图。第二个似乎会引起问题。还有其他方法吗?
我问这个是因为我不希望面板上的绘图在调整表单大小时一直闪烁。如果有办法在不使用双缓冲的情况下摆脱闪烁,我会很高兴知道。
【问题讨论】:
-
我认为这取决于您要做什么。您是否尝试刷新数据或动画?你在尝试制作游戏吗?我记得使用 system.drawing 消除闪烁非常困难,即使使用双缓冲(有时帧速率非常慢,即使在双缓冲时也看起来像闪烁)
-
这是一个在 WinForms 窗口中玩的游戏。图纸绘制在面板上。当用户单击面板时,绘图正在更改。但是当有滚动和调整大小的过程时,也会有闪烁。
-
您可以在这里找到解决方案,它对我有用。 [解决方案][1][1]:stackoverflow.com/questions/16882921/…
标签: c# winforms panel system.drawing double-buffering