gpt4 book ai didi

c# - 当 Panel.AutoSize = true 时添加控件后 Panel.Size 何时更新?

转载 作者:太空狗 更新时间:2023-10-29 20:28:00 25 4
gpt4 key购买 nike

我正在使用 WinFormsC# 中创建一个 GUI。
我正在尝试将以编程方式创建的面板一个放在另一个面板下方。由于这些面板的内容会因内容而异,因此我使用 Panel.AutoSize 让 WinForms 执行正确的大小调整。

问题是:如果我在填充 Panel 后立即使用 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 中有更多控件> 并且我需要在下方几行处使用该面板高度。

最佳答案

我相信正在发生的事情是,当您在其父级上执行 PerformLayout 时,将确定面板的大小。您可以通过将面板的父 SuspendLayout/ResumeLayout 代码移动到 Loop 中,使其按您希望的方式工作。

int yPos = 0;
foreach (String entry in entries)
{
this.SuspendLayout();
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(true);
this.ResumeLayout(true);
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.PerformLayout();

关于c# - 当 Panel.AutoSize = true 时添加控件后 Panel.Size 何时更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14206634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com