簡體   English   中英

C#自動將表單調整為DataGridView的大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM