15

Forms とUserControlsの生成されたデザイナー コードを見てきましたが、InitializeComponent()メソッドでは常に

    this.SuspendLayout();

で終わります

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

しかし、これらのメソッドのmsdnドキュメントで私が見ることができるものから、で終わらないでしょう

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

まったく同じことをしますか?それとも、ここで何か不足していますか?

別の方法で一連のコントロールを追加する予定であり、サスペンドとレジュームのルーチンを適切かつ効率的に実行する必要があると考えたためです。しかし、これらの 2 つのメソッド呼び出しの理由が何であるかを理解することはできません。

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

親コントロールに複数のコントロールを追加する場合は、追加するコントロールを初期化する前に SuspendLayout メソッドを呼び出すことをお勧めします。コントロールを親コントロールに追加したら、ResumeLayout メソッドを呼び出します。これにより、多くのコントロールを持つアプリケーションのパフォーマンスが向上します。

レイアウトの実行

コントロールがすべての子コントロールにレイアウト ロジックを適用するように強制します。PerformLayou t メソッドを呼び出す前に SuspendLayoutメソッドを呼び出した場合、 Layoutイベントは抑制されます。レイアウトイベントは、SuspendLayout および ResumeLayout メソッドを使用して抑制することができます。

MSDN リンク - PerformLayout メソッド

于 2009-08-27T09:07:59.033 に答える