我有一个 .net 4.0 winforms 项目,我需要在其中以编程方式设置窗口(System.Windows.Forms.Form)的边界(又名大小)并同时在其中添加/删除控件,而不会出现可见闪烁. 表单不是用户可调整大小的,唯一改变其大小的地方是 this.Bounds = foo / this.DesktopBounds = foo / ... 调用。
我已经阅读了有关通过使用 p/invoke 发送 WM_SETREDRAW 来防止闪烁的信息,以及有关 SuspendRedraw/SuspendLayout 和朋友的信息。我仍然看到闪烁发生,并将问题确定为:
Windows 在设置其边界/大小时重绘表单,即使重绘被禁用。
我猜这不是由表单本身引起的,而是由窗口管理器引起的?
那么 - 有没有办法在任何情况下绝对防止重绘任何东西,然后重新启用重绘并在之后手动刷新?那种“冻结窗口并显示快照”、更改内容和“一次性用更新的窗口(包括位置和大小)替换快照”?
谢谢,干杯,蒂姆