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

时间:2020-03-06 14:23:32  来源:igfitidea点击:

我要实现的是一种带有按钮的表单,该按钮使表单"下拉"并变大,显示更多信息。我当前的尝试是这样的:

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布尔值的设置将表单的Height设置为相同的值,但最终产生了相同的副作用。

PS:我在Visual Studio 2008中使用.NET 3.5. 欢迎使用其他解决方案,但这是我对如何"应该"完成以及如何进行尝试的思考。

编辑:根据接受的答案,代码似乎可以正常工作。如果其他人对此特定问题有疑问,请检查表单的AutoSize属性,该属性应为FALSE,而不是TRUE。 (这是默认设置,但是我使用表单时已将其打开,同时还打开了具有自动调整大小的标签,以便更早显示调试信息)

解决方案

根据文档,使用0表示最大或者最小尺寸。星期四,我只是尝试了一下,根本不喜欢0。因此,我像我们一样使用了int.MaxValue,它起作用了。我们使用什么版本的框架?

实际上,在反射器中查看MinimumSizeMaximumSize(.NET 3.5)可以很清楚地看出,设计行为与文档建议的不太相同。根据帮助程序类确定一些最小宽度限制,并且0没有特殊含义(即没有限制)。

另一个注意事项是,我在上面的代码中看到我们正在根据Button的文本值进行扩展或者收缩,这是一个坏主意,如果以后有人来更改设计器中的文本,使其变为" Expand" <如果不查看代码,则会产生意外的副作用,大概是某个地方的代码更改了按钮的文本,最好在某个地方设置状态变量并打开它。