1010使用tableLayoutPanel可以帮助解决此问题。
添加一个tableLayoutPanel并将其大小调整为适合您的需求。
将表格锚定到顶部,底部,左侧和右侧。
将GroupBoxA放置在表格的左上角单元格中。
将GroupBoxB放置在表格的右下角单元格中。
对于两个GroupBox,根据需要调整它们的大小,并将它们锚定到四个边缘。
现在它们将与应用程序成比例地增长和缩小。
另外,您还可以向表中添加更多控件。 如果您需要一个控件跨越多行或列,请使用RowSpan / ColumnSpan属性。
- jmstoker8仍在测试该答案,尚未成功。您确定要将GroupBox A放在左上角单元格中,GroupBox B放在右下角单元格中吗?难道不应该是将GroupBox A放在左上角单元格中,GroupBox B放在左下角单元格中吗?换句话说,使用一个列来创建tableLayoutPanel? - scryptKiddy这取决于你的布局。如果两个单元格能够满足你的需求,那么你可以使用一列,然后调整锚定以获得想要的效果。如果你想确保GroupBoxB不会重叠在GroupBoxA的底部或右侧,那么你将需要2列。如果你只关心它不通过底部,那么只需要一个列。 - jmstoker是的,在TabControl的左侧只有两个GroupBox。一个在另一个上面。它们右侧是DataGridView。它们都可以很好地调整大小,除了GroupBoxes。仍在尝试锚定等操作,但还没有成功。我能做到的最好的就是将这两个GroupBoxes放入单列tableLayoutPanel中,一个在另一个上面,将它们都锚定到TBLR,但GroupBoxes只显示一半,并被切断。非常奇怪。我应该上传这些截图吗? - scryptKiddy1你也可以将所有控件添加到 tableLayoutPanel 中,不仅限于 groupBox。控件可以跨越表格的多个单元格以满足你的需求。所以你只有三个控件吗?两个 groupBox 和一个 DataGridView? - jmstoker从你所说的,这是我会做的。将groupBoxes和DataGridView放在一个单列的表格中,每个单元格中,并设置每个的dock属性为fill。根据与选项卡边缘的期望距离定位进度条和按钮。按钮应该锚定到底部和右侧。如果您希望进度条随调整大小而拉伸,则将其锚定到左侧,底部和右侧。表格本身应该锚定到四个方向。让我知道结果如何。 - jmstoker显示剩余3条评论回答链接33如果您的GroupBox在另一个控件中,比如选项卡或其他控件中,则可以按照以下方式操作:
在我的情况下,我有一个GroupBox在选项卡中,我在InitializeComponent()方法中调用了以下方法来强制GroupBox调整为选项卡大小。
this.groupBox4.ResumeLayout(false);
this.groupBox4.PerformLayout();
this.tabPage2.ResumeLayout(false);
this.tabPage2.PerformLayout();
如果您有多个GroupBox,您需要相应地设置锚定。
- Satish Kumar回答链接11尽管这个问题很古老,但仍有人可能会发现它有用...我遇到了同样的问题,并找到了一个可行的解决方案——在窗体的调整大小方法中更改 GroupBox 的最小宽度/高度,而不是更改其宽度/高度。编辑:修正了拼写错误。
private void Form1_Resize(object sender, EventArgs e) {
groupBox1.MinimumSize = new Size(this.Width /2, this.Height);
}
- Kellei回答链接11我遇到了类似的问题,我只是在两个 GroupBox 上使用了分割容器,并将分割容器固定在主窗体的顶部、底部、左侧和右侧,同时将两个 GroupBox 也固定在其容器的顶部、底部、左侧和右侧。
- Antonio Correia回答链接11有点偏离原问题,但我的问题是我的 Group Box 的 MaximumSize 字段未设置或太小,因此无法调整高度!
- Greg A回答链接