TableLayoutPanel を使用すると、厄介なパフォーマンスの問題に直面しています。RadioButton と LinkLabel を使用した単純なユーザー コントロールがあります。LinkLabel のテキストは動的であるため、コントロール全体で AutoSize プロパティが true に設定されています。
これで、AutoScroll が true に設定され、TableLayoutPanel が自動サイズ設定され、内部に 2 列の Panel ができました。この TableLayoutPanel には、上記のユーザー コントロールが設定されています。
private void PopulateLocationItemsTable(Control[] Controls)
{
//Suspend outher Panel and set AutoScroll to false just in case.
panelLocationItemsTableCountainer.SuspendLayout();
panelLocationItemsTableCountainer.AutoScroll = false;
//Suspend TableLayoutPanel
tableLocationItems.SuspendLayout();
Controls = Controls.OrderBy(c => c.Text).ToArray();
//Populate left column
int verticalPosition = 3;
int leftColumnControlsNumber = Controls.Length / 2;
for (int i = 0; i < leftColumnControlsNumber; i++)
{
tableLocationItems.Controls.Add(Controls[i], 0,0);
Controls[i].Location = new Point(10, verticalPosition);
verticalPosition += 17;
}
//Populate right column
verticalPosition = 3;
for (int i = leftColumnControlsNumber; i < Controls.Length; i++)
{
tableLocationItems.Controls.Add(Controls[i], 0, 1);
Controls[i].Location = new Point(10, verticalPosition);
verticalPosition += 17;
}
//Resume TableLayoutPanel
tableLocationItems.ResumeLayout(true);
//And restore outher Panel state
panelLocationItemsTableCountainer.AutoScroll = true;
panelLocationItemsTableCountainer.ResumeLayout(true);
}
問題は、ユーザー コントロールが最初に FormLoad イベントに取り込まれ、実際に表示される前にフォームが約 10 秒間ハングすることです。これは私にはまったく受け入れられません。
ユーザー コントロールの AutoSize プロパティを false に設定すると、この問題はなくなります。また、ユーザーコントロールを外側のパネルに直接配置しようとしましたが、それも正常に機能します。問題は TableLayoutPanel だけです。誰かがそのような問題に直面し、解決策を見つけましたか? もちろん、正しい座標を計算するパネルに自分のユーザーコントロールを直接配置できますが、TableLayoutPanel を使用することは、そのようなタスクの「正しい」方法です。