2009-06-11 9 views
4

Ich arbeite an einer .NET-C# -Anwendung mit einem Hauptformular, bei dem es sich um einen MDI-Container handelt. Wenn der Benutzer ein untergeordnetes MDI maximiert, zeichnet Windows einen Kontrollstreifen direkt unter der Titelleiste des Containers Formular, das das Symbol des unterordneten und die Systemschaltflächen auf der rechten Seite enthält. Was ich eigentlich brauche, ist, diesen Streifen auszublenden und ein benutzerdefiniertes Steuerelement zu verwenden, um die gleiche Funktionalität bereitzustellen.Entfernen des MDI-Standardmenüs eines MDI-Containerformulars, wenn ein untergeordnetes MDI maximiert wird

Gibt es eine Möglichkeit, Windows daran zu hindern, diesen MDI-Streifen zu zeichnen?

+1

Haben Sie durch Zufall irgendwelche Fortschritte gemacht? Es stört mich auch, und ich überlegte gerade, eine Frage mit einem Kopfgeld darauf zu stellen, um es zu beantworten. Wenn du immer noch keine Antwort hast, öffne ich eine neue Kopfgeldfrage. – SqlRyan

Antwort

8

Eigentlich fand ich eine einfache und interessante Art und Weise, dieses Ding aus meiner Form zu entfernen, indem den MainMenuStrip Eigenschaft des Formulars mit einem Dummy Menustrip-Steuerelement zuweisen (ohne es in der Controls-Auflistung des Formulars zu setzen):

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

Dadurch wird verhindert, dass die Standard-MDI-Beschriftung angezeigt wird, da das Formular die Funktionalität an die Standardmenüleiste delegiert. Da das MenuStrip-Steuerelement nicht in der Controls-Auflistung des Formulars ist, ist es auch nicht sichtbar und dient daher nur als ein Dummy-Menü, das zum Ausblenden des bösartigen MDI-Menüs verwendet wird, wenn ein Kind maximiert wird.

+2

Sie, Sir, sind ein Genie. Ich würde das tun, wenn ich könnte. – SqlRyan

0

Dieses Gespräch von Jahren schlägt vor, dass es keine Möglichkeit gibt, es zu tun, und er endete mit User Controls auf dem Hauptformular nach oben, anstatt wirklich einer MDI-Schnittstelle:

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

Jeder anderer Thread Ich finde online ist entweder aufgegeben ohne Antworten oder eine Sackgasse. Ich kann diese Funktionalität nicht glauben, wenn sie so umständlich ist und nichts nativ verfügbar ist.

0

Es gibt einen einfacheren Weg als den Code zum Load-Ereignis für jedes Formular hinzuzufügen. Platzieren Sie diesen Code einfach im MdiParent-Formular und ersetzen Sie MenuStrip durch den tatsächlichen Namen, den Sie für Ihr menustrip-Steuerelement verwenden.

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 
Verwandte Themen