繁体   English   中英

使用窗体调整大小调整控件

[英]Resize Controls with Form Resize

我已经阅读了几个堆栈溢出问题,但没有找到解决问题的有效方法。 每当调整窗体大小时,如何调整控件大小? 我希望它们在表格变大或变小时变大或变小。

在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();
*/
}

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

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

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

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

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

使用控件的锚点 在锚定顶部,底部,左侧和右侧时有一个选项。 而且你很好。

您试图在代码中执行的操作是更改控件的大小,但这并不是一个好方法。 通常,在重新设置表单大小时,不应更改Buttons和TextBoxes的大小,但是它们经常需要移动(更改位置)。 某些控件确实需要根据调整大小后的表单来更改大小,但是在大多数情况下,只需更改一维即可。 用于工作区域的中央控件(例如,如果您正在开发绘图工具)应更改两个尺寸的大小。 您可以通过正确设置控件的Dock和/或Anchor属性来完成所有这些操作。

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

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

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

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

我找到了一种对我来说效果很好的替代解决方案,感谢对该解决方案的任何负面或正面评论。

在不同区域的拆分容器中使用多个拆分容器和拆分容器,我可以剖析布局的主要部分,并在其中利用对接和锚定功能完全可以完成我想做的事情-它的工作精美。

我要指出的是,我知道一些在线人士提到拆分容器使用了大量资源。

如果控件在组框中,请确保将组框属性设置为调整大小。 框内的控件由框控制。 框的大小(除非它在另一个框内)由表单控制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM