簡體   English   中英

如何調整表單大小以自動適應其內容?

[英]How do you resize a form to fit its content automatically?

我試圖實現以下行為:

在表格上有一個tabcontrol。 在那個tabcontrol上有一個樹視圖。 為了防止出現滾動條,我希望表單在第一次顯示時根據樹視圖的內容更改其大小。

如果樹視圖中有太多節點要顯示在表單的默認大小上,則表單應更改其大小,以便樹視圖上沒有垂直滾動條(最大為屏幕大小允許的最大大小)。

我需要知道的是,是否可以通過控件的屬性實現此行為。 我確信這可以通過以編程方式計算和設置元素的大小來實現,但我想知道是否有辦法通過AutoSizeMode等設置實現這一點。

[UPDATE]

這是我的應用程序的用戶看到的第一個對話框:它是一個選擇要使用的數據庫的對話框。 這是一個數據庫列表,帶有tabcontrol,buttens等。如果列表太長,則會出現滾動條,我的同事希望它們消失。

使用AutoSize和AutoSizeMode屬性。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.autosize.aspx

一個例子:

private void Form1_Load(object sender, EventArgs e)
{
    // no smaller than design time size
    this.MinimumSize = new System.Drawing.Size(this.Width, this.Height);

    // no larger than screen size
    this.MaximumSize = new System.Drawing.Size(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, (int)System.Windows.SystemParameters.PrimaryScreenHeight);

    this.AutoSize = true;
    this.AutoSizeMode = AutoSizeMode.GrowAndShrink;

    // rest of your code here...
}

通過使用各種大小調整屬性(Dock,Anchor)或容器控件(Panel,TableLayoutPanel,FlowLayoutPanel等),您只能指定從外部控件到內部控件的大小。 但是.Net框架中沒有任何(工作)允許通過子控件的大小來決定容器的大小。 我也錯過了幾次並嘗試了AutoSize屬性,但它從未奏效。

所以你所能做的就是嘗試手動完成這些工作,抱歉。

來自MSDN

為了最大限度地提高工作效率,Windows窗體設計器AutoSizeForm類的AutoSize屬性。 在設計時 ,表單的行為就像AutoSize屬性設置為false一樣 ,無論其實際設置如何。 在運行時 ,不會進行任何特殊調整,並且按屬性設置的指定應用AutoSize屬性。

這可能很有用。 它將新表單的大小調整為用戶控件,然后將用戶控件錨定到新表單:

Form f = new Form();
MyUserControl muc = new MyUserControl();
f.ClientSize = muc.Size;
f.Controls.Add(muc);
muc.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
f.ShowDialog();

您可以通過計算節點的高度,將其乘以節點數,然后相應地設置表單的MinimumSize屬性來計算TreeView所需的高度。

// assuming the treeview is populated!
nodeHeight = treeview1.Nodes[0].Bounds.Height;

this.MaximumSize = new Size(someMaximumWidth, someMaximumHeight);

int requiredFormHeight = (treeView1.GetNodeCount(true) * nodeHeight);

this.MinimumSize = new Size(this.Width, requiredFormHeight);

NB。 這假設treeview1是表單上唯一的控件。 設置requiredFormHeight變量時,您需要允許樹視圖周圍的其他控件和高度要求,例如您提到的tabcontrol。

(但我會同意@jgauffin並評估在未經用戶同意的情況下每次加載表單時調整表單的要求背后的基本原理 - 也許讓用戶定位並調整表單大小並記住它而不是??)

這個技術解決了我的問題:

在父母形式:

frmEmployee frm = new frmEmployee();
frm.MdiParent = this;
frm.Dock = DockStyle.Fill;
frm.Show();

在子表單中(Load事件):

this.WindowState = FormWindowState.Maximized;

如果您嘗試根據表單調整內容,則以下內容將有所幫助。 當我試圖使表單上的內容適合表格調整大小時,它幫助了我。

this.contents.Size = new Size(this.ClientRectangle.Width,this.ClientRectangle.Height);

我使用這個代碼,它工作得很好

const int margin = 5;
        Rectangle rect = new Rectangle(
            Screen.PrimaryScreen.WorkingArea.X + margin,
            Screen.PrimaryScreen.WorkingArea.Y + margin,
            Screen.PrimaryScreen.WorkingArea.Width - 2 * margin,
            Screen.PrimaryScreen.WorkingArea.Height - 2 * (margin - 7));
        this.Bounds = rect;

我在我的項目中使用此代碼,對我有用。

    private void Form1_Resize(object sender, EventArgs e)
    {
        int w = MainPanel.Width; // you can use form.width when you don't use panels

        w = (w - 120)/4; // 120 because set 15px for each side of panels
                         // and put panels in FlowLayoutPanel
                         // 4 because i have 4 panel boxes
        panel1.Width = w;
        panel2.Width = w;
        panel3.Width = w;
        panel4.Width = w;
    }

在此輸入圖像描述

暫無
暫無

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

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