使用表单调整大小调整控件大小

时间:2013-02-28 09:22:43

标签: c# winforms resize controls

我已经阅读了几个堆栈溢出问题而没有找到解决问题的好方法。每当调整表单大小时,如何调整控件的大小?当形式变大或变小时,我希望它们变得更大或更小。

在visual basic中,这很容易用form.Zoom属性(当然不需要调整控件大小,但解决了我需要的东西)。不幸的是,这在C#winforms中不可用。

以下是我没试过的其他一些事情:

private void formMain_Resize(object sender, EventArgs e)
{/*
double scale;
this.scaleWidth = (float)this.Width / (float)this.origWidth;
this.scaleHeight = (float)this.Height / (float)this.origHeight;
if (this.scaleHeight > this.scaleWidth)
{
    scale = this.scaleHeight;
}
else
{
    scale = this.scaleWidth;
}

foreach (Control control in this.Controls)
{
    control.Height = (int)(control.Height * this.scaleHeight);
    control.Width = (int)(control.Width * this.scaleWidth);
    this.Refresh();
    //  control.Font = new Font("Verdana", control.Font.SizeInPoints * heightRatio * widthRatio);
}
///////This scaling didnt work for me either
//this.Scale(new SizeF(this.scaleWidth, this.scaleHeight));
//this.Refresh();
*/
}

如果我在另一个堆栈溢出问题上忽略了一个实际的工作代码示例,我很乐意看到它,但我发现的那些与上面那些无法正常工作的相似。

也许我在滥用它,有人可以发布示例代码,以便向我们这些不断询问此问题如何解决问题的人展示。

另外,我尝试过使用一些锚点/对接工具,认为他们会自动允许它,但事实并非如此。

5 个答案:

答案 0 :(得分:17)

最好的选择是使用TableLayoutPanel。将TableLayoutPanel放在表单上,​​将Dock属性设置为Fill,创建所需的行和列,并将控件放在单元格内。当然,您需要在单元格内的控件上设置Dock/Anchor,以便它们响应单元格大小的更改。在某些情况下,您可能需要将Panel放入单元格并将控件放入其中,因为每个单元格只能包含一个控件。您可能还需要在控件上设置RowSpan / ColumnSpan

使用TableLayoutPanel,您可以完全控制如何安排cotrols。您可以为行和列设置绝对或百分比大小。

答案 1 :(得分:5)

使用控件的Anchor。有一个选项可以固定顶部,底部,左侧和右侧。你很高兴。

答案 2 :(得分:1)

您在代码中尝试做的是更改控件的大小,这不是一个好方法。通常,在重新调整表单大小时,不应更改按钮和文本框的大小,但它们通常需要移动(更改位置)。某些控件确实需要根据重新调整大小的形式更改大小,但在大多数情况下只需要一个维度。用于工作区域的中央控件(如果您正在开发用于绘图的工具)应更改两个尺寸的大小。所有这些都可以通过正确设置控件的Dock和/或Anchor属性来实现。

textBox1.Dock = DockStyle.Bottom;
textBox1.Anchor = AnchorStyles.Bottom & AnchorStyles.Left;

使用设计器时,所有这些都可以在“属性”面板中轻松设置。

但如果这对您来说还不够,在极少数情况下,您肯定只想更改控件的位置:

textBox1.Location = new Point(newX, newY);

答案 3 :(得分:1)

我找到了一个适合我的替代解决方案,感谢对解决方案的任何负面或正面评论。

在不同区域的Split Containers中使用多个Split Containers和Split Containers,我可以分割布局的主要部分,并在那里利用Docking和Anchoring,我能够完成我想要做的事情 - 它工作得非常好。

我想指出我知道网上有些人提到拆分容器会占用大量资源。

答案 4 :(得分:1)

如果您的控件位于组框中,请务必设置组框属性以调整大小。盒子内的控件由盒子控制。框大小(除非它在另一个框内)由表单控制。