【发布时间】:2011-11-17 15:56:38
【问题描述】:
我正在尝试为我的自定义组合框创建一个下拉式无边框表单。下拉表单包括一个用户可以从中选择项目的网格。在大多数情况下,它有效。但是,我注意到网格底部的空间不包含任何数据。我已将 AllowUserToAddRows 设置为 false。额外的空间甚至不包括单元格——它只是空白的控制空间。只是为了确保额外的空间在网格中(而不是表单),我将网格背景颜色设置为黄色并显示在表单中,所以我知道额外的空间在网格中。
注意:我以编程方式将网格添加到表单中。我不确定这是否重要。而且,我正在根据网格大小调整表单的大小。表单宽度设置为网格宽度。如果网格包含超过 10 行,我将表单高度设置为仅显示 10 行,并且垂直滚动条允许用户滚动。如果网格包含少于 10 行,我将表单设置为完全适合这些行,并且不需要垂直滚动条。这听起来会影响网格大小吗?
我在表单的 VisibleChanged 事件中执行以下操作,以根据网格内容调整表单大小。请注意,这可能有拼写错误,因为我是从打印输出中重新输入的。注意:MaxRowsToShow = 10。
int rowsHeight = _grid.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
int rowCount = _grid.Rows.GetRowCount(DataGridViewElementStates.Visible);
int rowHeight = _grid.RowTemplate.Height;
int rowsToShow = Math.Min(MaxRowsToShow, rowCount);
Height = rowsToShow * rowHeight + _grid.ColumnHeadersHeight;
更新: 我取得了一些进展。我发现将 DataGridView 的 ScrollBars 属性设置为 ScrollBars.Vertical 会导致网格末尾的额外空间。如果我在少于 10 个项目时将 ScrollBars 设置为 ScrollBars.None,我看不到额外的空间。但是,当我有超过 10 个项目时,我仍然需要垂直滚动条,所以在这种情况下我仍然看到额外的空间。但是,至少我找到了问题的根源。有谁知道为什么 ScrollBars 属性会导致这种奇怪的行为。
【问题讨论】:
-
发生这种情况时是否少于 10 行?
-
如何计算表单高度以仅显示 10 行?
-
@Charles,当行数多于十行或少于十行时会发生这种情况。每当少于十行时,我希望垂直滚动条不存在,但它们确实存在,因为底部有额外的空间。我已经在我的问题中添加了代码。虽然我没有包括宽度变化,但我认为这不会影响这个问题。
-
我相信表单的大小适合填充的行。但是,底部总是有大约一行高度的额外空间。我只提到了表单的大小,因为我不知道它是否会以某种方式影响子网格的大小。
标签: .net winforms datagridview size