我正在使用WinForms创建C# GUI。我试图通过编程方式创建的面板一个接一个地放置。由于这些面板的内容可以根据其内容而变化,因此我正在使用Panel.AutoSize使WinForms执行正确的调整大小。
问题是:如果我在填充面板后立即使用Panel.Height(或Panel.Size.Height),则返回的值始终是默认值。虽然可以在启动应用程序时看到调整大小,但我不知道具体时间。
以下是我所做的简化版本:
所以真正的问题是:如何在添加控件后获取更新后的
注意:我知道可以使用
问题是:如果我在填充面板后立即使用Panel.Height(或Panel.Size.Height),则返回的值始终是默认值。虽然可以在启动应用程序时看到调整大小,但我不知道具体时间。
以下是我所做的简化版本:
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
中有更多的控件,并且我需要在几行代码下面使用该面板高度。