C# 获取winform控件的设计大小

C# 获取winform控件的设计大小,c#,winforms,C#,Winforms,我正在尝试制作一个win格式的可折叠面板。我可以降低高度,使其看起来像动画塌陷,但我无法将其展开,因为塌陷后原始设计高度丢失 while (panel1.Height > label1.Height) { panel1.Height--; } 上面的代码设置面板折叠的动画。但是当panel1.Height现在等于label1.Height时,如何将其展开?如何获得设计阶段面板1.高度?是否有方法获得面板的设计尺寸 我不希望在折叠时将原始高度放入存储的变量

我正在尝试制作一个win格式的可折叠面板。我可以降低高度,使其看起来像动画塌陷,但我无法将其展开,因为塌陷后原始设计高度丢失

while (panel1.Height > label1.Height) 
    {
        panel1.Height--;
    }
上面的代码设置面板折叠的动画。但是当
panel1.Height
现在等于
label1.Height
时,如何将其展开?如何获得设计阶段
面板1.高度
?是否有方法获得面板的设计尺寸


我不希望在折叠时将原始高度放入存储的变量中,因为我可能有数百个面板。此外,我不希望硬编码高度,因为在设计过程中,所有面板都会有不同的高度。

在折叠面板之前,必须将
panel1.高度
存储在类中的某个位置(字段或属性)。Design size是类的唯一初始字段值,在运行时无法获取它们。

您可以阅读有关初始字段值的更多详细信息 或

如果有多个面板控件,则使用
字典
存储每个面板折叠前的高度。


此外,如果用户在应用程序中更改面板的大小,而不仅仅是在设计时,此解决方案将允许您将面板恢复到折叠之前的位置。

您可以创建自定义并添加一个属性,如
DefaultHeight
,您可以用当前高度填充该属性

大概是这样的:

public class CustomPanel : Panel
{
    public int DefaultHeight { get; private set; }

    public CustomPanel()
    {
        // Add an event, which gets triggered at the next resize.
        // We need this event, because at initializing the Control have the default Height.
        // The Resize event getting triggered, when the Form load and initializes the Controls.
        this.Resize += this.Initial_Resize;
    }

    private void Initial_Resize(object sender, EventArgs e)
    {
        // Set the DefaultHeight to the value of the new Size
        this.DefaultHeight = this.Height;
        // Remove the event, otherwise DefaultHeight would get overridden at every resize.
        this.Resize -= this.Initial_Resize;
    }
}
使用此代码,您可以在表单中使用新的CustomPanel和
DefaultHeight
属性在折叠后展开控件


也许有更好的方法,但这将帮助您,无需进一步努力。欢迎提出任何建议

谢谢你的建议。我想最好的方法是创建另一个控件,这是Nik Bo和Chetan Ranpariya建议的。由于此项目可能会被其他程序员传递和编辑,新程序员可能会将此新控件误认为是标准面板,并在项目的其他部分使用标准面板。这也是为什么我不喜欢新控件的想法的原因,如果在后期信息没有被传递

目前,我正在面板中使用一个面板,该面板将确定控制
自动调整大小效果的边界。虽然折叠功能仍然相同,但我通过使用
autosize=true
展开面板。下面是代码

对于塌陷:

while (panel1.Height > label1.Height) 
{
    panel1.AutoSize = false;
    panel1.Height--;
}
对于扩展:

panel1.AutoSize = true;

请将您迄今为止尝试过的代码示例放入Nick code addedYou可以使用标签的Tag属性,并在form_load上设置为初始高度。另一种方法是创建从Panel继承的新控件,并具有新的属性InitialHeight。使用该控件并在表单_load中设置该属性值,并使用它来增加面板高度。“在折叠为存储变量期间的原始高度,因为我可以有数百个面板”-然后您应该将其作为包含所有必要逻辑和状态变量的派生控件编写。定义一个从面板继承的新类。拥有字符串键和int值的字典。在字典中以panelid作为键存储面板的初始高度。展开面板时,使用字典获取初始高度。