【问题标题】:How do you limit height of a Sytem.Windows.Form to an exact value?如何将 System.Windows.Form 的高度限制为精确值?
【发布时间】:2008-09-18 21:19:20
【问题描述】:

我想要实现的是一个表单,上面有一个按钮,导致表单“下拉”并变大,显示更多信息。我目前的尝试是这样的:

private void btnExpand_Click(object sender, EventArgs e)
{
    if (btnExpand.Text == ">")
    {
        btnExpand.Text = "<";
        _expanded = true;
        this.MinimumSize = new Size(1, 300);
        this.MaximumSize = new Size(int.MaxValue, 300);
    }
    else
    {
        btnExpand.Text = ">";
        _expanded = false;
        this.MinimumSize = new Size(1, 104);
        this.MaximumSize = new Size(int.MaxValue, 104);
    }
}

效果很好!除了一个小细节......请注意,宽度值应该能够从 1 变为 int.MaxValue?好吧,在实践中,它们从 this.Width 变为 int.MaxValue,即。您可以使表格更大,但永远不会再变小。我不知道为什么会发生这种情况。有人有什么想法吗?

作为记录:我还尝试了一个 Form.Resize 处理程序,它将表单的高度设置为相同的值,具体取决于布尔值 _expanded 的设置,但我最终得到了相同的副作用。

PS:我在 Visual Studio 2008 中使用 .NET 3.5。欢迎使用其他解决方案,但这是我对“应该”如何完成以及我如何尝试这样做的想法。

编辑:根据接受的答案响应,似乎代码有效。如果其他人遇到此特定问题的麻烦,请检查表单的 AutoSize 属性,它应该是 FALSE,而不是 TRUE。 (这是默认设置,但我在使用表单和带有自动调整大小的标签时将其打开,以便更早地显示调试信息)

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    根据文档,使用 0 表示没有最大或最小大小。 Tho,我刚刚尝试过,它根本不喜欢 0。所以我像你一样使用了 int.MaxValue 并且它起作用了。您使用的是哪个版本的框架?

    【讨论】:

    • 由于某种原因,表单上的 AutoSize 设置为 true,这干扰了 MaximumSize 和 MinimumSize...呵呵。那好吧。无论如何谢谢:)
    • 作为一个额外的旁注,我相信这意味着使用 ie。 new Size(0, 0) 表示没有最小值/最大值,但我不认为代码旨在处理单个 0 值。很遗憾,但你有它。
    【解决方案2】:

    实际上,看看反射器中的MinimumSizeMaximumSize (.NET 3.5),很明显设计的行为与文档建议的不太一样。辅助类确定了一些最小宽度约束,0 没有特殊含义(即没有限制。

    另一个注意事项,我在上面的代码中看到您正在根据 Button 的文本值进行扩展或收缩,这是一个坏主意,如果有人稍后出现并更改设计器中的文本说:“扩展" 而不是

    【讨论】:

    • 已经存在状态变量这一事实只是为了突出这一点。谢谢。但是当他们开始单击按钮时,他们仍然需要查看我的代码,这会弄乱他们自己对按钮文本的更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2017-11-15
    相关资源
    最近更新 更多