15

我查看了Forms 和UserControls 生成的设计器代码,并以InitializeComponent()它们总是以它们开头的方法

    this.SuspendLayout();

并以

    this.ResumeLayout(false);
    this.PerformLayout();

但是从我在这些方法的 msdn 文档中可以看到,不会以

    this.ResumeLayout(true); // Or just this.ResumeLayout()

做同样的事情?或者我在这里错过了什么?

问是因为我将以不同的方法添加一堆控件,并认为我应该执行挂起-恢复例程以变得既好又高效。但是当您看似只使用一个时,无法弄清楚这两个方法调用的原因是什么......

4

2 回答 2

8

使用反射器:

this.ResumeLayout() is equal to this.ResumeLayout(true)

this.ResumeLayout(true) is not equal to this.ResumeLayout(false) + this.PerformLayout()

原因:
当调用ResumeLayout为false时,有一个控件集合循环通过,LayoutEngine对布局中的每个控件调用InitLayout。

于 2009-08-27T12:21:41.927 回答
4

暂停布局

将多个控件添加到父控件时,建议在初始化要添加的控件之前调用 SuspendLayout 方法。将控件添加到父控件后,调用 ResumeLayout 方法。这将提高具有许多控件的应用程序的性能。

执行布局

它强制控件将布局逻辑应用于其所有子控件。如果在调用 PerformLayou 方法之前调用了SuspendLayout方法 则会抑制Layout事件。可以使用 SuspendLayout 和 ResumeLayout 方法抑制布局事件。

MSDN 链接 - PerformLayout 方法

于 2009-08-27T09:07:59.033 回答