2009-06-11 106 views
4

我正在研究一個具有MDI容器主窗體的.NET C#應用程序。當用戶最大化MDI孩子時,Windows在容器窗體的標題欄下繪製一個控制條,窗體上有兒童圖標和右側的系統按鈕。基本上,我需要的是隱藏這個條,並使用自定義控件來提供相同的功能。當MDI Child最大化時刪除MDI容器窗體的默認MDI菜單

有什麼辦法可以防止Windows繪製這個MDI條?

+1

偶然,你有沒有取得任何進展?它也困擾着我,我正在考慮用一個獎勵來回答一個問題。如果你還沒有答案,我會打開一個新的賞金問題。 – SqlRyan 2009-06-22 22:15:45

回答

8

其實,我發現了一個簡單而有趣的方式通過分配與虛擬MenuStrip控件窗體的MainMenuStrip屬性刪除從我的形式這個東西(不把它在表格控件集合):

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

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

+2

先生,你是個天才。如果可以的話,我會+42。 – SqlRyan 2009-06-29 04:00:04

0

這從幾年前的談話表明,有沒有辦法做到這一點,他結束了與用戶控件的主要形式,而不是實際使用的MDI接口:

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

每其他線程我可以在網上找到,要麼放棄,要麼沒有答案,要麼死衚衕。我不能相信這個功能,如果這麼麻煩,而不是本地可用。

0

有比向每個表單的Load事件添加代碼更簡單的方法。只需將此代碼放在MdiParent窗體中,並將​​MenuStrip替換爲您用於MENUtrip控件的實際名稱即可。

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