如何将System.Windows.Form的高度限制为精确值?

时间:2008-09-18 21:19:20

标签: c# winforms

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

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处理程序,它根据boolean _expanded设置的内容将表单的高度设置为相同的值,但最终会产生相同的副作用。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

另一个注意事项,我在上面的代码中看到你根据Button的文本值进行扩展或收缩,这是一个坏主意,如果有人稍后出现并更改设计器中的文本说“展开” “而不是&lt;在没有查看你的代码的情况下,它会产生意想不到的副作用,大概是你在某处改变了按钮文本的代码,最好在某个地方有一个状态变量并打开它。