Когда обновляется Panel.Size после добавления элементов управления, когда Panel.AutoSize = true?
Я создаю графический интерфейс вC # с помощьюWinForms.
Я пытаюсь расположить программно созданные панели один под другим. Поскольку содержимое этих панелей может различаться в зависимости от их содержания, я используюPanel.AutoSize
позволить WinForms выполнить правильное изменение размера.
Проблема в том, что если я используюPanel.Height
(или жеPanel.Size.Height
) сразу после заполненияPanel
возвращаемое значение всегда является моим значением по умолчанию. Изменение размера происходит, как я вижу при запуске приложения, но я просто не знаю, когда.
Вот упрощенная версия того, что я делаю:
this.SuspendLayout();
int yPos = 0;
foreach (String entry in entries)
{
Panel panel = new Panel();
panel.SuspendLayout();
panel.AutoSize = true;
panel.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowOnly;
panel.BackColor = System.Drawing.SystemColors.Window; // Allows to see that the panel is resized for dispay
panel.Location = new System.Drawing.Point(0, yPos);
panel.Size = new System.Drawing.Size(this.Width, 0);
this.Controls.Add(panel);
Label label = new Label();
label.AutoSize = true;
label.Location = new System.Drawing.Point(0, 0);
label.MaximumSize = new System.Drawing.Size(panel.Width, 0);
label.Text = entry;
panel.Controls.Add(label);
panel.ResumeLayout(false);
panel.PerformLayout();
yPos += panel.Height; // When breaking here, panel.Height is worth 0
yPos += label.Height; // This works perfectly, label.Height was updated according to the text content when breaking at that point
}
this.ResumeLayout(false);
this.PerformLayout();
Итак, настоящий вопрос: как я могу получить обновленнуюPanel.Size
после добавления элементов управления, чтобы получить правильное значение высоты?
Примечание: я знаю, что могу использоватьTextBox
высота, но я нахожу это не элегантным и непрактичным, так как в моем реальном коде есть больше элементов управления вPanel
и мне нужно использовать эту высоту панели несколько строк ниже.