如何自动调整Form高度,使内部DataGridView不显示垂直滚动条?
让Form自动适配DataGridView高度,避免垂直滚动条
这个需求其实挺常见的,核心思路就是算出DataGridView实际需要的总高度,再让Form的高度刚好能容纳它,还要记得算上Form本身的标题栏、边框这些非客户区的高度,不然很容易出现高度不准的情况。我给你整理了一套亲测好用的代码方案:
第一步:先调整DataGridView的基础属性
先把几个关键属性设置好,避免干扰后续的高度计算:
- 把
AllowUserToAddRows设为false:如果不需要底部的空行,不然会平白多算一行的高度 - 如果你的行高是自动适配内容的,记得把
AutoSizeRowsMode设为AllCells,确保行高能正确匹配内容高度
第二步:编写高度计算与调整的方法
写一个专门的方法来处理高度计算,后续数据变化时也能直接复用:
using System.Linq; // 要引用Linq,不然Rows.Cast会报错 private void AdjustFormHeightToFitDgv() { // 先确保行高已经正确计算(如果是自动行高的话) dataGridView1.AutoResizeRows(DataGridViewAutoSizeRowsMode.AllCells); // 计算DataGridView需要的总高度:表头高度 + 所有行高度总和 + 上下内边距 int dgvRequiredHeight = dataGridView1.ColumnHeadersHeight + dataGridView1.Rows.Cast<DataGridViewRow>().Sum(row => row.Height) + dataGridView1.Padding.Top + dataGridView1.Padding.Bottom; // 获取Form非客户区的高度(标题栏+边框的总高度) int formNonClientHeight = this.Height - this.ClientSize.Height; // 设置Form的总高度,同时保证不小于最小合理高度(比如标题栏高度) int newFormHeight = dgvRequiredHeight + formNonClientHeight; this.Height = Math.Max(newFormHeight, this.MinimumSize.Height); // 也可以直接设置客户区高度,Form会自动调整总高度,效果是一样的 // this.ClientSize = new Size(this.ClientSize.Width, dgvRequiredHeight); }
第三步:在合适的时机调用调整方法
在数据加载完成后调用这个方法,比如在Form_Load事件里:
private void Form1_Load(object sender, EventArgs e) { // 这里先完成你的数据绑定操作 // 示例:dataGridView1.DataSource = yourDataList; // 数据加载完毕后,立刻调整Form高度 AdjustFormHeightToFitDgv(); }
额外提醒
- 如果后续数据有变化(比如新增、删除行),记得重新调用
AdjustFormHeightToFitDgv(),Form会自动更新高度 - 如果Form设置了
MinimumSize,要确保计算后的高度不小于这个值,避免Form显示异常 - 你的场景里只有一列,基本不会出现水平滚动条,但如果后续加了列导致出现水平滚动条,可能需要额外调整Form的宽度
内容的提问来源于stack exchange,提问作者kimondoe
相关产品推荐
相关产品推荐

