[英]C# Auto Resize Form to DataGridView's size
我有一個Form和一個DataGridView。 我在運行時填充DataGridView,所以我想知道如何根據DataGridView的大小動態調整Form的大小? 有什么樣的財產或方法嗎? 或者我是否必須自己確定尺寸並相應更新?
您可以通過計數列寬度找到實際寬度。
不要忘記您的表單可能更復雜,您應該計算其他控件。
public class YourForm : Form
{
public YourForm()
{
DataGridView _dgv = new DataGridView() { Dock = DockStyle.Fill};
Controls.Add(_dgv);
}
public void CorrectWindowSize()
{
int width = WinObjFunctions.CountGridWidth(_dgv);
ClientSize = new Size(width, ClientSize.Height);
}
DataGridView _dgv;
}
public static class WinObjFunctions
{
public static int CountGridWidth(DataGridView dgv)
{
int width = 0;
foreach (DataGridViewColumn column in dgv.Columns)
if (column.Visible == true)
width += column.Width;
return width += 20;
}
}
通常,控件使其尺寸適應包含形式的大小。 要調整表格的大小,你的DataGridView的大小, 你必須自己決定大小,然后設置窗體的大小來匹配,記住要考慮到窗體的菜單條和/或工具欄所需的額外的大小,狀態欄或其他控件。
在您的情況下,最好不要調整窗體大小以匹配網格視圖控件。 最有可能的是,網格視圖中的行數可能比Windows屏幕上的行多得多,並且您不希望表單延伸到可查看的桌面區域下方。 一般來說,這種情況正是您希望擁有可滾動網格視圖的原因 - 用於查看一次可以容納在屏幕上的更多數據。
int dgv_width = dataGridView1.Columns.GetColumnsWidth(DataGridViewElementStates.Visible);
int dgv_height = dataGridView1.Rows.GetRowsHeight(DataGridViewElementStates.Visible);
this.Width = dgv_width;
this.Height = dgv_height;
this.Width
調整此表單寬度的大小。
當然你要添加固定值(例如margin,Form title heigth,ecc。)。 通過測試,我已經達到了適合我的價值觀(不要問為什么......):
this.Width = dgv_width + 147;
this.Height = dgv_height + 47;
您可以使用PreferredSize
屬性( MSDN PreferredSize條目 )。 對於DataGridView
控件,我發現首選的寬度和高度比我預期的大約20個單位。 我猜控件可能會考慮滾動條來計算其首選大小。
我發現的另一個警告是,在添加或更改表中的項目后, PreferredSize
計算將不會立即准確。 為了解決這個問題,我為RowHeadersWidthChanged
事件創建了一個處理程序。
這對我有用:
class GridToy {
private DataGridView grid;
public GridToy(DataGridView dgv) {
grid = dgv;
grid.RowHeadersWidthChanged += AdjustWidth; // Event handler.
Layout();
}
public void Layout() {
// Just do some arbitrary manipulation of the grid.
grid.TopLeftHeaderCell.Value = "Some Arbitrary Title";
}
public void AdjustWidth() {
Control horizontal = grid.Controls[0]; // Horizontal scroll bar.
Control vertical = grid.Controls[1]; // Vertical scroll bar.
grid.Width = grid.PreferredSize.Width - vertical.Width + 1;
grid.Height = grid.PreferredSize.Height - horizontal.Height + 1;
}
}
我會轉向另一個方向並將網格大小調整為表格。 (某些用戶可能具有低分辨率)設置形式=>最大化的'WindowState'屬性。 (可選)設置DGV =''Top,Bottom,Left,Right'的'anchor'屬性。
您可以在分類或使用ID后將表單中的屬性“高度”設置為自動,這應該可以,
我剛嘗試過..它有效
#form1{
background-color:white;
height:auto;
width:1500px;
border-top:medium solid #3399FF;
margin-top:100px;
margin-left:30px;
display: inline-block;
text-align: center;
float: none;
}
我只是把我所做的完全放在你迷路的地方。不要擔心我的設計中的其他屬性。
dataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.AllCells);
希望這可以幫助 :)
設置AutoSizeColumnsMode :Fill
網格屬性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.