1

我有一个基于几个嵌套TableLayoutPanels 的中等复杂度的布局。调整窗体大小会导致更深的嵌套表中的控件在视觉上落后于调整大小。首先,这使它们看起来像是在调整窗体大小时它们在移动,但更糟糕的是,当它们滞后到足以离开分配的表格单元格时,控件的边缘会明显被剪裁。

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

编辑:在尝试了一堆程序后,我得出结论,调整大小的滞后是一个普遍存在的问题。对我来说,似乎每个人都已经辞职,这是不可避免的和可以接受的。当然,如果它实际上是不可避免的,那么接受这一点就容易多了:)

在您最喜欢的“良好 UI”程序中查看延迟的最简单方法是:通过按住左边界调整它的大小并观察所有右对齐的控件(或者,顶部边界和底部对齐的控件,如状态栏)。周围都坏了。

如果有人可以提供充分的理由说明为什么在使用本机 Windows 控件时这是不可避免的,我会接受这个答案。此外,如果您发现使用本机控件的程序不会遭受这种情况,请说出来,这可能会有所帮助...

4

3 回答 3

2

Windows 中本机控件的问题在于每个控件都负责绘制自身,这意味着将位图绘制到屏幕上。当容器控件中的每个控件都调整大小时,它占据的窗口区域变得无效,因此不仅容器中的每个控件都重新绘制,容器本身也必须重新绘制。此外,调整大小/重绘事件都发生在 UI 线程上,因此它是单线程操作。自 16 位窗口引入本机窗口绘制背后的基本机制以来,它并没有改变。

人们使用许多技巧(hacks)来尝试解决问题,例如双缓冲、屏幕外渲染或简单地禁用调整大小。

要了解它应该如何,请查看 WPF。MS 开发它是为了解决这个问题。

如果 WPF 不是一个选项,并且您使用的是 Windows 窗体,请查看 microsoft 的布局相关文档。您可以实现自己的布局引擎,而不是依赖开箱即用的微软产品。

于 2009-08-27T05:43:35.233 回答
1

这似乎根本不可能,包括 WPF(实际上更糟 - 请参阅这个问题)。Qt 可以避免这种延迟,除非启用 Aero。叹...

于 2009-10-03T17:38:58.283 回答
0

设置DoubleBuffered = true。您可以在表格上设置它。

于 2017-11-17T08:23:48.320 回答