我正在使用MetroFramework处理winforms应用程序。我想以编程方式调整表单的大小,以便更大的对象可以适应它。为此我在tabControl
对象中使用来自框架的切换。使表单更大可以正常工作,但是当我禁用切换时,它不想缩小表单。
private void tSynced_CheckedChanged(object sender, EventArgs e)
{
if (tSynced.Checked)
{
//Sync enabled
Console.WriteLine("Sync enabled");
this.Size = new Size(this.Width + 300, this.Height);
this.MinimumSize = new Size(this.Width, this.Height);
this.MaximumSize = new Size(this.Width + 200, this.Height);
} else
{
//Sync disabled
Console.WriteLine("Sync disabled");
this.Size = new Size(this.Width - 300, this.Height);
this.Width = 534;
Console.WriteLine(this.Size);
this.MinimumSize = new Size(this.Width, this.Height);
this.MaximumSize = new Size(this.Width, this.Height);
}
}
正如你所看到的,我一直在尝试一些我所知道的技术,只是试一试并从那里开始工作,但它似乎不起作用。这对我来说似乎很奇怪,因为第一种方法(this.Size
行)在使表单更大时确实有效。根据Visual Studio,this
关键字指的是Form
。它似乎没有尝试调整tabControl
的大小,因为我将其绑定到右侧,并且正确地与右边界一起移动。
this.Size
的日志会返回较大的值,在我的情况下为{Width=834, Height=354}
。
我已尝试将初始值保存在Size
变量中,并从那里恢复(因为它会考虑用户调整大小),但这似乎无法正常工作。
Size oldSize; //Global variable
private void initialize()
{
oldSize = new Size(this.Width, this.Height);
Console.WriteLine(oldSize);
}
this.Size = oldSize; //In the eventhandler
日志将返回正确的值,在我的情况下为{Width=534, Height=354}
。但它再次设置this.Size
属性时拒绝使用该值...
我有什么看法?
答案 0 :(得分:3)
放大表单时,将MinimumSize设置为当前大小 - 但是当你将其缩小时,尝试重置大小,同时仍然设置MinimumSize - 因此表单不会调整大小。
您需要做的就是在更改尺寸之前重置MinimumSize。