我想根據它包含的行數量來使我的DataGridView AutoSize的高度。目前,我可以使用以下行來實現:DataGridView自動高度 - 如何自動調整DataGridView高度?
然而,這使得水平滾動條消失,在DataGridView被切斷。
如何在不丟失水平滾動條的情況下自動調整高度?
我想根據它包含的行數量來使我的DataGridView AutoSize的高度。目前,我可以使用以下行來實現:DataGridView自動高度 - 如何自動調整DataGridView高度?
然而,這使得水平滾動條消失,在DataGridView被切斷。
如何在不丟失水平滾動條的情況下自動調整高度?
選項1 - 覆蓋的getPreferredSize
您可以覆蓋的DataGridView
GetPreferredSize
方法和使用新建議的大小new Size(this.Width, proposedSize.Height)
調用基方法。通過這種方式,控制的電流寬度將保持不變,而自動調整大小規則將其高度適用於:
using System.Drawing;
using System.Windows.Forms;
public class MyDataGridView : DataGridView
{
public override Size GetPreferredSize(Size proposedSize)
{
return base.GetPreferredSize(new Size(this.Width, proposedSize.Height));
}
}
選擇2 - 基於計算的自動大小的高度設置高度
如果您不想從DataGridView
派生,則可以通過調用GetPreferredSize
並通過new Size(0, 0)
來計算自動尺寸,然後將DataGridView
的高度設置爲結果的高度,這樣您只能更改DataGridView
的高度。你應該設置自動高度RowsAdded
,RowsRemoved
,一些其他活動,如果你需要:
void AutoHeightGrid(DataGridView grid)
{
var proposedSize = grid.GetPreferredSize(new Size(0, 0));
grid.Height = proposedSize.Height;
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.RowsAdded += (obj, arg) => AutoHeightGrid(dataGridView1);
dataGridView1.RowsRemoved += (obj, arg) => AutoHeightGrid(dataGridView1);
//Set data source
//dataGridView1.DataSource = something;
}
如果你想確保在網格中的所有變化,包括改變Font
,行的高度將導致調整網格,可以調用Paint
事件中的方法。
選項3 - 設置MAXIMUMSIZE
另外,作爲由Hans提到的,如果你不想從DataGridView
派生,你可以使用網格的MaximumSize
財產。你可以將其設置爲new Size(this.dataGridView1.Width, 0)
:
dataGridView1.MaximumSize = new Size(this.dataGridView1.Width, 0);
dataGridView1.AutoSize = true;
注意
由於使用MaximumSize
是不是當用戶想要讓由左,右錨件網格寬度變化非常友好,我喜歡使用選項1或選項2。
設置其MaximumSize屬性。 –
@HansPassant我不知道我在測試'MaximumSize'時犯了什麼錯誤,這使我確信它不會工作,但是閱讀您的評論後,我再次嘗試了它,併發揮了作用。是的,設置'新大小(this.dataGridView1.Width,0)'是完全可行的。 –
@HansPassant但是由於當用戶想要改變網格寬度時,使用'MaximumSize'不太友好,我更喜歡在我的答案中使用* Option 1 *或* Option 2 *。 –