簡體   English   中英

當MDI子項最大化時,刪除MDI容器窗體的默認MDI菜單

[英]Removing the default MDI menu of a MDI Container form when a MDI Child is maximized

我正在開發一個.NET C#應用程序,它具有一個主要Form,它是MDI容器。 當用戶最大化MDI子項時,Windows在容器窗體的標題欄下方繪制一個控制條,該窗體具有子項的圖標和右側的系統按鈕。 基本上,我需要隱藏此條帶並使用自定義控件來提供相同的功能。

有沒有辦法阻止Windows繪制這個MDI條帶?

實際上,我找到了一種簡單而有趣的方法,通過使用虛擬MenuStrip控件(不將其放在Form的Controls集合中)分配Form的MainMenuStrip屬性,從表單中刪除此東西:

private void OnForm_Load(object sender, EventArgs e)
{
    this.MainMenuStrip = new MenuStrip();
}

這可以防止默認的MDI標題被繪制,因為Form將其功能委托給其默認菜單條(如果有的話)。 由於MenuStrip控件不在Form的Controls集合中,因此它也不可見,因此它只是用作在孩子最大化時隱藏討厭的MDI菜單的虛擬菜單。

幾年前的這個對話表明沒有辦法做到這一點,他最終在主窗體上使用了用戶控件,而不是實際使用MDI接口:

http://answers.google.com/answers/threadview/id/135136.html

我可以在網上找到的每一個其他線程都要么放棄,要么沒有答案,要么死路一條。 如果這么麻煩而且本身不可用,我無法相信這個功能。

有一種比將代碼添加到每個表單的Load事件更簡單的方法。 只需將此代碼放在MdiParent表單中,並將MenuStrip替換為您用於menustrip控件的實際名稱。

Private Sub MenuStrip_ItemAdded(ByVal sender As System.Object, ByVal e As System.Windows.Forms.ToolStripItemEventArgs) Handles MenuStrip.ItemAdded
        Dim s As New String(e.Item.GetType().ToString())
        If s = "System.Windows.Forms.MdiControlStrip+SystemMenuItem" Then
            e.Item.Visible = False
        End If
    End Sub

暫無
暫無

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

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