Ale*_*rov 4 c# system.drawing panel winforms double-buffering
可以通过将"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.它是滞后的,即使它用在一个小图纸上,我有一些我在表格中使用的自定义资源和其他东西,因为我不会把整个表格变成一张图纸.第二个似乎会引起问题.还有其他方法吗?
我问这个是因为我不希望在调整表单大小时,面板上的绘图一直闪烁.如果有办法在没有双缓冲的情况下摆脱闪烁,我会很高兴知道.
如果您不需要滚动支持,请使用PictureBox,默认情况下它是双缓冲的.获得双缓冲可滚动面板非常简单:
using System;
using System.Windows.Forms;
class MyPanel : Panel {
public MyPanel() {
this.DoubleBuffered = true;
this.ResizeRedraw = true;
}
}
Run Code Online (Sandbox Code Playgroud)
ResizeRedraw分配禁止容器控件的绘制优化.如果你在面板上做任何绘画,你将需要这个.没有它,当您调整面板大小时,绘画会变脏.
双缓冲实际上使绘画变慢.这可能会对以后绘制的控件产生影响.他们在被填充之前留下的洞可能会被看到一段时间,也被认为是闪烁.你会在这个答案中找到反对效果的反措施.
| 归档时间: |
|
| 查看次数: |
13352 次 |
| 最近记录: |