簡體   English   中英

使兩個窗體控件均勻地調整窗口大小

[英]Make two form controls resize with window evenly

我有一個在設計器中看起來像這樣的表單,兩個網格視圖,完全相同的屬性。 它工作了一點,但現在當我調整大小時,只有正確的網格視圖水平擴展,它們都垂直擴展。 同時鎖定表單和控件並不會阻止我調整表單的大小,這將是最簡單的解決方案。

什么可能導致這個? 網格視圖上唯一相關的屬性是每個的頂部,右側,左側,底部的錨點。 請參閱底部的代碼。

以下是一些截圖:

這是Designer中的表單:

在Designger中

以下是我嘗試調整大小時的表單:

表格已調整大小

正如你可以看到右半部分更寬,我也無法正常調整大小,因為我嘗試對角調整大小它主要是垂直增長,水平調整大小也是一樣的。 我已經永遠調整了調整大小的問題,但兩個網格視圖最初都是同等調整大小,我沒有做任何修改而且他們停了下來。 我在這里錯過了什么嗎? 為什么不鎖定表單阻止它可以調整大小? 我也鎖定了所有控件。

以防萬一,這里是設計器中網格視圖的代碼,首先是正確的:

    // clientHistoryTableDataGridView
    // 
    this.clientHistoryTableDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
    | System.Windows.Forms.AnchorStyles.Left) 
    | System.Windows.Forms.AnchorStyles.Right)));
    this.clientHistoryTableDataGridView.AutoGenerateColumns = false;
    this.clientHistoryTableDataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
    this.clientHistoryTableDataGridView.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
    this.clientHistoryTableDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    this.clientHistoryTableDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
    this.dataGridViewTextBoxColumn4,
    this.dataGridViewTextBoxColumn5,
    this.dataGridViewTextBoxColumn6});
    this.clientHistoryTableDataGridView.DataSource = this.clientHistoryTableBindingSource;
    this.clientHistoryTableDataGridView.Location = new System.Drawing.Point(426, 52);
    this.clientHistoryTableDataGridView.Name = "clientHistoryTableDataGridView";
    this.clientHistoryTableDataGridView.RowHeadersVisible = false;
    this.clientHistoryTableDataGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.True;
    this.clientHistoryTableDataGridView.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
    this.clientHistoryTableDataGridView.Size = new System.Drawing.Size(430, 360);
    this.clientHistoryTableDataGridView.TabIndex = 4;
    this.clientHistoryTableDataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.clientHistoryTableDataGridView_CellContentClick);

和左側:

    // clientTableDataGridView
    // 
    this.clientTableDataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
    | System.Windows.Forms.AnchorStyles.Left) 
    | System.Windows.Forms.AnchorStyles.Right)));
    this.clientTableDataGridView.AutoGenerateColumns = false;
    this.clientTableDataGridView.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells;
    this.clientTableDataGridView.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;
    this.clientTableDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
    this.clientTableDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
    this.dataGridViewTextBoxColumn1,
    this.dataGridViewTextBoxColumn2,
    this.dataGridViewTextBoxColumn3});
    this.clientTableDataGridView.DataSource = this.clientTableBindingSource;
    this.clientTableDataGridView.Location = new System.Drawing.Point(1, 52);
    this.clientTableDataGridView.Name = "clientTableDataGridView";
    this.clientTableDataGridView.RowHeadersVisible = false;
    this.clientTableDataGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.True;
    this.clientTableDataGridView.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
    this.clientTableDataGridView.Size = new System.Drawing.Size(428, 360);
    this.clientTableDataGridView.TabIndex = 3;
    this.clientTableDataGridView.CellContentClick += new System.Windows.Forms.DataGridViewCellEventHandler(this.clientTableDataGridView_CellContentClick);

編輯:

我通過一起使用兩個答案來修復調整大小問題。 並且還禁用主窗體上的自動調整大小並將bordertyle設置為相當大。

解決方案:

添加SplitContainer與錨Left|Top|Right|Bottom

SplitterDistance設置為SplitContainer寬度的一半

將clientTableDataGridView放在左側面板中並設置Dock = Fill

將clientHistoryTableDataGridView放在右側面板中並設置Dock = Fill

您可以通過以下方式解決此問題:

  1. 將gridview的錨點設置為Top | Bottom Top | Bottom
  2. 覆蓋表單的OnResize方法,並在此方法中設置寬度和位置,如果兩個網格視圖都手動如下:

protected override void OnResize(EventArgs e)
{
    base.OnResize(e);

    var width = ClientRectangle.Width / 2;
    clientTableDataGridView.Left = 0;
    clientTableDataGridView.Width = width;
    clientHistoryTableDataGridView.Left = width;
    clientHistoryTableDataGridView.Width = width;
}

當然,不是在步驟1中設置錨點,而是可以在OnResize完全管理網格視圖大小。 在這里,我提到這一步只是為了簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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