1

我有一个 .net 4.0 winforms 项目,我需要在其中以编程方式设置窗口(System.Windows.Forms.Form)的边界(又名大小)并同时在其中添加/删除控件,而不会出现可见闪烁. 表单不是用户可调整大小的,唯一改变其大小的地方是 this.Bounds = foo / this.DesktopBounds = foo / ... 调用。

我已经阅读了有关通过使用 p/invoke 发送 WM_SETREDRAW 来防止闪烁的信息,以及有关 SuspendRedraw/SuspendLayout 和朋友的信息。我仍然看到闪烁发生,并将问题确定为:

Windows 在设置其边界/大小时重绘表单,即使重绘被禁用。

我猜这不是由表单本身引起的,而是由窗口管理器引起的?

那么 - 有没有办法在任何情况下绝对防止重绘任何东西,然后重新启用重绘并在之后手动刷新?那种“冻结窗口并显示快照”、更改内容和“一次性用更新的窗口(包括位置和大小)替换快照”?

谢谢,干杯,蒂姆

4

1 回答 1

0

使用窗体的 ResizeRedraw 属性。将其设置为假。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.resizeredraw.aspx

之后您还需要手动重绘窗口。

于 2012-11-06T16:34:17.897 回答