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() 或
  • 简历布局()

将影响结果的外观,如here所述。

于 2012-11-19T14:20:06.693 回答