Winforms 如何防止在编程调整大小时重新绘制托管winform?

Winforms 如何防止在编程调整大小时重新绘制托管winform?,winforms,flicker,redraw,Winforms,Flicker,Redraw,我有一个.net 4.0 winforms项目,在这个项目中,我需要以编程方式设置窗口(System.Windows.Forms.Forms)的边界(也称为大小),同时向其中添加/删除控件,而不会出现可见的闪烁。表单不可由用户调整大小,唯一更改其大小的地方是this.Bounds=foo/this.DesktopBounds=foo/。。。打电话 我已经读过关于使用p/invoke发送WM_SETREDRAW来防止闪烁的内容,以及关于SuspendRedraw/SuspendLayout和fri

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

我已经读过关于使用p/invoke发送WM_SETREDRAW来防止闪烁的内容,以及关于SuspendRedraw/SuspendLayout和friends的内容。我仍然看到闪烁发生,并将问题归结为:

Windows在设置窗体的边界/大小时会重新绘制窗体,即使已禁用重新绘制

我猜这不是表单本身造成的,而是窗口管理器造成的

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

谢谢,干杯,
Tim

使用表单的ResizeRedraw属性。将其设置为false


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

谢谢!不幸的是,我已经尝试过这个属性(在OP中忘记提及)。我可能还需要补充,我正在使用DevExpress组件;它们重写表单(XtraForm)-这可能是问题的一部分(它们以某种方式重写了SuspendDraw/ResizeRedraw/…属性)?