2009-06-11 11 views
4

Je travaille sur une application .NET C# qui a un formulaire principal qui est un conteneur MDI. Lorsque l'utilisateur maximise un enfant MDI, Windows dessine une bande de contrôle juste sous la barre de titre du conteneur contenant l'icône de l'enfant et les boutons du système sur la droite. Fondamentalement, ce dont j'ai besoin est de cacher cette bande et d'utiliser un contrôle personnalisé pour fournir la même fonctionnalité.Suppression du menu MDI par défaut d'un formulaire MDI Container lorsqu'un enfant MDI est agrandi

Est-il possible d'empêcher Windows de dessiner cette bande de MDI?

+1

Par chance, avez-vous fait des progrès à ce sujet? Cela me dérange aussi, et je pensais ouvrir une question avec une prime sur elle pour obtenir une réponse. Si vous n'avez toujours pas de réponse, j'ouvrirai une nouvelle question de prime. – SqlRyan

Répondre

8

En fait, j'ai trouvé un moyen facile et intéressant de supprimer cette chose de ma forme en attribuant la propriété MainMenuStrip du formulaire avec un contrôle MenuStrip factice (sans le mettre dans la collection Controls du formulaire):

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

Cela empêche que la légende MDI par défaut soit peinte car le formulaire délègue sa fonctionnalité à sa bande de menu par défaut le cas échéant. Comme le contrôle MenuStrip ne figure pas dans la collection Controls du formulaire, il n'est pas non plus visible et sert donc de menu fictif utilisé pour masquer le menu MDI désagréable lorsqu'un enfant est maximisé.

+2

Vous, monsieur, êtes un génie. Je le ferais +42 si je le pouvais. – SqlRyan

0

Cette conversation des années suggère il y a qu'il n'y a aucun moyen de le faire, et il a fini avec les contrôles de l'utilisateur sur le formulaire principal, au lieu d'utiliser effectivement une interface MDI:

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

Chaque autre thread Je peux trouver en ligne est soit abandonné sans réponses ou une impasse. Je ne peux pas croire cette fonctionnalité si si encombrante et pas quelque chose nativement disponible.

0

Il existe un moyen plus simple que d'ajouter le code à l'événement Load pour chaque formulaire. Il suffit de placer ce code dans le formulaire MdiParent et de remplacer MenuStrip par le nom que vous utilisez pour votre commande 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 
Questions connexes