我想要实现的是一个表单上有一个按钮,使表单“下拉”并变大,显示更多信息。我目前的尝试是:
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。 (这是默认设置,但我已经打开它,因为我使用表单和带有自动调整大小的标签,以便更早地显示调试信息)
答案 0 :(得分:1)
根据文档,使用0表示没有最大或最小大小。所以,我只是尝试了它,它根本不喜欢0。所以我像你一样使用int.MaxValue并且它有效。您使用的框架版本是什么版本?
答案 1 :(得分:0)
实际上,看一下反射器中的MinimumSize
和MaximumSize
(.NET 3.5),很明显设计的行为与文档建议的行为并不完全相同。从辅助类确定了一些最小宽度约束,0没有特殊含义(即没有限制。
另一个注意事项,我在上面的代码中看到你根据Button的文本值进行扩展或收缩,这是一个坏主意,如果有人稍后出现并更改设计器中的文本说“展开” “而不是&lt;在没有查看你的代码的情况下,它会产生意想不到的副作用,大概是你在某处改变了按钮文本的代码,最好在某个地方有一个状态变量并打开它。