改变数百个WinForms控件位置的性能

iam*_*mnp 9 .net performance winforms

我有一个循环:

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

如果我在panel1中有200或300个控件可以吗?或者如果我添加这个会更好:

if (ctl->Location.Y != i*10) ctl->Location.Y = i*10;
Run Code Online (Sandbox Code Playgroud)

我只是不知道.NET的控件是否会重新绘制(需要时间)或者他们会自动检查是否需要重绘(仍然是相同的位置)

Luk*_*ied 5

您可以像下面这样优化它以避免连续重新绘制:

panel1.SuspendLayout();

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

panel1.ResumeLayout(false);
panel1.PerformLayout();
Run Code Online (Sandbox Code Playgroud)

要么

panel1.ResumeLayout()
Run Code Online (Sandbox Code Playgroud)

@CodesInChaos:好点!它看起来是一样的,但事实并非如此.使用

  • ResumeLayout(false)/ PerformLayout()或
  • ResumeLayout()

会影响结果的样子作为解释在这里.

  • 为什么`ResumeLayout(false)`+`PerformLayout()`而不是`ResumeLayout()`? (3认同)