9

私はループを持っています:

for (int i = 0; i < panel1->Controls->Count; ++i) {
    Control^ ctl = panel1->Controls[i];
    ctl->Location.Y = i*10;
}

panel1 に 200 個または 300 個のコントロールがあっても大丈夫ですか? または、これを追加するとより良いでしょう:

if (ctl->Location.Y != i*10) ctl->Location.Y = i*10;

とにかく.NETのコントロールが再描画されるかどうか(時間がかかるかどうか)、または再描画する必要がないかどうかを自動的に確認するかどうか(まだ同じ場所)がわからない

4

1 に答える 1

5

継続的な再描画を避けるために、次のように最適化できます。

panel1.SuspendLayout();

for (int i = 0; i < panel1->Controls->Count; ++i) {
{
    // do reposition
}   

panel1.ResumeLayout(false);
panel1.PerformLayout();

また

panel1.ResumeLayout()

@CodesInChaos: 良い点です! 同じように見えますが、そうではありません。使用するには

  • ResumeLayout(false)/PerformLayout() または
  • ResumeLayout()

here で説明されているように、結果がどのように見えるかに影響します。

于 2012-11-19T14:20:06.693 に答える