如何预防控制对调整大小视觉滞后内TableLayoutPanel中?(How to prevent

2019-08-02 15:03发布

我有一个基于几个嵌套的中等复杂的布局TableLayoutPanel秒。 调整大小的形式使控制更深嵌套表格内可视地滞后调整大小的后面。 首先,这使得他们看起来像在窗体正在调整他们走动,但糟糕的是,控件的边缘明显修剪时,他们落后足以让他们的分配表格单元格。

有什么办法防止这种情况或这是最好的TableLayoutPanel可以做什么?

编辑 :已经尝试了一堆的方案我来,关于调整大小滞后是一个普遍存在的问题的结论。 对我来说,似乎每个人都已经辞职,这是不可避免的可以接受的 。 当然,如果它实际上是不可避免的 ,然后接受这是一个很容易:)

最简单的方法,看看滞后在您最喜爱的“好UI”计划:通过按住左边界调整其大小和观看所有右对齐控制跳来跳去(或者,顶部边界和底部对齐的控件,比如状态条)。 这一切都围绕打破。

如果任何人都可以提供很好的理由,使用本机Windows控件时,这是不可避免的,我会接受的答案。 另外,如果你使用不受此请说出来本机控件找到一个程序,这将有助于...

Answer 1:

在窗口与本地控件的问题是,每个控制负责绘制本身,这意味着画位图在屏幕上。 作为在容器中控制每个控制被调整大小它占据变为无效窗口的区域,从而不仅在容器重绘每个控制,容器本身必须重新绘制。 此外,调整大小/重画事件在UI线程上所有存在的所以这是一个单线程操作。 后面的本机窗口绘图的基本机制并没有改变,因为16位Windows介绍了吧。

有许多技巧(黑客),人们采用,试图解决该问题得到,像双缓冲,关闭屏幕渲染,或者干脆禁用调整。

要了解应该如何,看看WPF。 MS开发它作为解决这一问题的一种手段。

如果WPF是不是一种选择,你正在使用Windows窗体检查出的布局从微软相关的文档。 您可以实现自己的布局引擎,而不是依靠开箱微软的产品中。



Answer 2:

这似乎并不可能在所有的,包括WPF(实际上是更糟-看到这个问题)。 Qt可以避免这种滞后,除非航空启用。 叹...



Answer 3:

设置DoubleBuffered = true 。 您可以设置它的形式。



文章来源: How to prevent controls visually lagging behind on resize inside TableLayoutPanel?