如何避免c#.net中TableLayoutPanel的闪烁
我正在使用 TableLayoutPanel 来进行考勤标记。我在此 TableLayoutPanel 内添加了控件(面板和标签)并为它们创建了事件。在某些情况下,我已经清除了所有控件,并继续将相同的控件绑定到 TableLayoutPanel 的不同位置。重新绑定控件时,TableLayoutPanel 会闪烁并且初始化速度太慢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
暂停布局,直到添加完所有控件。
另请参阅使用双缓冲。您必须创建 TableLayoutPanel 的子类。请参阅此处的示例。
Suspend the layout until you've added all your controls on.
Also look at using Double Buffering. You'll have to create a sub-class of the TableLayoutPanel. See an example here.
VB.net:C#
:
在 VB 中将其添加到受影响类的底部,我向您保证它会起作用。
在 C# 中,将该属性与其他属性一起添加到类的顶部。
它本质上等待 Winform 的完整渲染,并消除绘制到屏幕上的窗体的闪烁。如果您还没有测试过,请不要忽视。我遇到了 winform 延迟的大问题,这解决了它。
VB.net:
C#:
In VB add it to the bottom of affected class and I assure you it will work.
In C# add the property to the top of the class along with your other properties.
It essentially awaits the full render of the Winform, and removes the flickering of the form being painted to the screen. If you havent tested it please dont disregard. I had a huge issue with winform latency and this fixed it.
这对我来说非常有用 删除由于 TableLayoutPanel & 导致的闪烁; Windows 表单中的面板
这里是该链接中的内容(逐字复制)
This worked great for me Remove flickering due to TableLayoutPanel & Panel in windows form
Here what's in that link (copied verbatim)
使用此面板将属性 dBuffer 设置为 true
Use this panel to set the property dBuffer true
我最终使用了另一种替代方案,因为我的 UI 中相当多的部分都使用透明度作为背景颜色。我知道这会显着降低 WINFORMS 的性能。然而,WPF 应用程序的情况并非如此(通常不可见闪烁),因此转换可能是有益的。
There is another alternative that I ended up using as quite alot of my UI was using Transparency for background colors. I understand that this significantly degrades performance in WINFORMS. However this isnt the case with WPF applications (not usually visible as a flicker), so a conversion could be beneficial.
//与表格布局面板的双缓冲解决方案完美配合,并且不会发生闪烁
//Works perfectly the double buffered solution for table layout panel and no flickering happens
作为上述的改进,我得到了更好的结果:
As an improvement of the above, I had better results with: