Question

J'ai un formulaire qui est un multimédia et qui a une bande de menu en haut. J'ajoute un formulaire enfant à mon conteneur de MDI et lorsque je maximise l'enfant, il maximise le contenu de la cartouche. Je veux savoir comment limiter l'enfant à maximiser au-dessous du menustrip. Toute aide serait la bienvenue.

Était-ce utile?

La solution

Votre formulaire enfant est optimisé de la même manière que les formulaires enfant sont supposés être maximisés dans le MDI. Il ne couvre pas vraiment la bande de menu du formulaire parent. Il fusionne sa propre bande de menu avec celle du formulaire parent.

Pour que le formulaire enfant n'occupe que la zone enfant disponible dans le parent MDI (et ne fusionne pas son menu avec le menu du parent), insérez quelque chose comme ce code dans l'événement Resize du formulaire enfant:

if (this.WindowState == FormWindowState.Maximized)
{
    this.WindowState = FormWindowState.Normal;
    this.Size = this.MdiParent.ClientSize;
    this.Location = new Point(0, 0);
}

ce qui empêchera que la fenêtre enfant soit réellement maximisée.

Je dis "quelque chose comme ce code" parce que cet extrait ne fonctionne pas exactement. La propriété ClientSize du formulaire parent donne la taille globale du formulaire, alors que vous souhaitez utiliser uniquement la taille de la zone cliente MDI. Je ne sais pas comment l'obtenir, et apparemment ce n'est pas très facile. Voir cette question:

Taille / emplacement de la zone client MDI Winforms

Autres conseils

Vous pouvez définir la propriété MaximumSize pour qu'elle ne remplisse pas tout le conteneur.

Je sais que c'est une vieille question, mais je viens de le rencontrer sur un ancien projet sur lequel je travaille. Voici donc une réponse pour tous ceux qui le verront. Définir le Dock sur DockStyle.Fill vous donnera le comportement que vous voulez.

Sachez simplement que la fenêtre agira / aura l’air étrange si vous essayez de la repositionner ou de la redimensionner alors qu’elle a ce style Dock.

Pour ce faire, je me suis abonné à l'événement de redimensionnement de la fenêtre du client MDI et, si la fenêtre venait juste d'être agrandie, j'ai défini son DockStyle sur Fill, le paramètre FormBorderStlye a FixedDialog (pour empêcher le redimensionnement) et l'état de la fenêtre à normal. pour empêcher la maximisation de se produire.

Pour empêcher l'utilisateur de déplacer la fenêtre alors qu'elle est dans cet "état maximisé" J'ai simplement substitué la méthode WndProc et je l’ai traitée lorsque la fenêtre était en train d’être déplacée (SC_MOVE) et placé un retour pour empêcher l’action de prendre effet.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top