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

Kai*_*ran 7 c# controls resize winforms

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

在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();
*/
}
Run Code Online (Sandbox Code Playgroud)

如果我在另一个堆栈溢出问题上忽略了一个实际工作的代码示例,我很乐意看到它,但我发现的那些与上面那些不起作用的类似.

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

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

Moh*_*han 18

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

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


Fre*_*gas 5

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


Kai*_*ran 2

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

在不同区域使用多个拆分容器和拆分容器内的拆分容器,我能够划分布局的主要部分,并在其中利用对接和锚定,我能够准确地完成我想要做的事情 - 它工作得很好。

我想指出的是,我知道网上有些人提到拆分容器使用大量资源。