簡體   English   中英

如何控制 MDI 窗體中子窗體的顯示順序

[英]How can I control the display order of child Forms in a MDI Form

當我使用MDI表格時,我遇到了問題。 我的源代碼就像這樣:

private void menuItem1_Click(object sender, EventArgs e)
    {
        Form[] charr = this.MdiChildren;
        int i = 0;            
        foreach (Form chform in charr)
        {
            chform.Dock = DockStyle.Top;                
        }
        this.LayoutMdi(System.Windows.Forms.MdiLayout.TileHorizontal);
    }

子窗體的數量多於 3。為了在調用LayoutMdi()方法后正確顯示它們,我必須將所有子窗體的Dock屬性設置為DockStyle.Top

調用LayoutMdi(MdiLayout.TileHorizontal) ,點擊第一個子 Form 的標題欄,這個子 Form 會自動顯示在MDI父級的底部。

我希望單擊的子窗體保持其原始位置。
這個問題有什么想法嗎?

查看鏈接的問題 - 建議設置Dock屬性以調整MDIChild表單位置 - 以及當前報告的行為,最好在沒有自動功能幫助的情況下定義MDIChild表單的布局。

這允許執行任何看起來合適的布局邏輯。

在該示例中, MDIChildren.Height計算相對於MDIParent.ClientSize.Height和打開的數量MDIChildren由2中的樣本代碼,基本測量兩次:,然后由值相乘。

這個乘數允許非常精確地定義MDICHildrenHorizontal Tile Height 當然,您可以實現一些其他邏輯,僅當至少有 3 個打開的MDIChildren時才應用乘數。

所有MDIChildren都重新調整大小以匹配MDIParent.Width和計算出的Height ,然后按 Name 排序並從上到下定位。

設置HorizontalTileHeightMultiplier不同值以查看MDIChildrenMDIParent.ClientArea ( MdiClient ) 中的位置。
這個乘數也可以用作應用程序中的自定義屬性,供其用戶使用,允許對表單進行自定義平鋪。

布局代碼作為私有方法提供,因此可以輕松地在不同的事件處理程序中使用它來執行/維護所選布局(例如MDIParent.Resize )。
如果需要,這個方法也可以很容易地適應替換MdiLayout.TileVertical

private float HorizontalTileHeightMultiplier = 2;

private void menuItem1_Click(object sender, EventArgs e)
{
    TileHorizontal()
}

private void TileHorizontal()
{
    int OpenedForms = Application.OpenForms.Count - 1;
    if (OpenedForms < 2) return;

    int StartLocation = 0;
    int ChildrenHeight = 
        (int)((this.ClientSize.Height / OpenedForms) * HorizontalTileHeightMultiplier);

    List<Form> children = this.MdiChildren.OrderBy(f => f.Name).ToList();
    foreach (Form child in children)
    {
        child.Size = new Size(this.ClientSize.Width - SystemInformation.VerticalScrollBarWidth - 4, ChildrenHeight);
        child.Location = new Point(0, StartLocation);
        StartLocation += ChildrenHeight;
    }
}

暫無
暫無

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

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