如何修复嵌套的winform控件闪烁问题

TJ_*_*her 11 c# layout user-controls winforms

我目前正在开发一个程序,该程序使用相当复杂的嵌套winform控件结构,当用户进行某些选择时,这些控件会动态更改.有关控件的具体布局的详细信息,请参阅此问题.

在进行选择时,会对由用户控件控制的基础模型进行大量更新.然后,这导致所显示的控件的大小/位置/可见性的一系列相应变化.所有这些变化都会导致屏幕上控件的剧烈闪烁.我需要以某种方式修复此问题,以便每次用户进行选择时,屏幕基本上都会冻结,直到所有控件更新完成.

我试图在许多不同的地方和方式使用Control.SuspendLayout/Control.ResumeLayout方法,我无法消除疯狂的闪烁.我认为在更改期间暂停根控件上的布局会解决问题,但是当更改子控件时,看起来这个SuspendLayout没有帮助.

我是否需要使用其他方法而不是SuspendLayout?有没有办法我可以调试SuspendLayout,看看为什么它似乎没有级联到所有的子控件?

Han*_*ant 14

Suspend/ResumeLayout不是你的问题.这只会暂停自动布局,即由Anchor和Dock属性触发的类型.双缓冲也无法解决您的问题,只能抑制每个控件中的闪烁.你真正的问题是你要同时更新太多的控件,每个控件都要自己画画,这需要时间.

你需要的是一种不同的双缓冲,合成.检查此线程中的解决方案是否解决了您的问题.


t0m*_*13b 0

SetControlStyles在用户控件中使用,该标志OptimizedDoubleBuffer将防止闪烁。