Я столкнулся с неприятной проблемой производительности при использовании TableLayoutPanel. У меня есть простой пользовательский контроль с RadioButton и LinkLabel. Текст LinkLabel является динамическим, поэтому весь элемент управления имеет свойство AutoSize, равное true.TableLayoutPanel с вложенным авторизованным пользовательским элементом управления производительностью
Теперь у меня есть панель с AutoScroll, установленная в true и TableLayoutPanel с авторазмерным размером и с двумя столбцами внутри нее. Это 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 является «правильным» способом для таких задач.
Благодарим за отзыв. После прочтения я придумываю решение этой проблемы. Не изящно, но быстро работает. Поскольку моя форма имеет статическую ширину, мне не нужны внутренние пользовательские элементы управления, которые можно настроить автоматически. Я могу просто установить их ширину, чтобы она соответствовала полной ширине столбца TableLayoutPanel. Когда внутренние пользовательские элементы управления имеют фиксированную ширину, проблема с производительностью уходит. Спасибо вам. – Shoar