J'ai un problème avec Winforms (vb.net).
La fenêtre principale est un conteneur MDI. L'utilisateur ouvre une nouvelle fenêtre enfant: p>
p> < P> puis le maximise, la fenêtre remplit correctement la zone du client. Mes commandes sont correctement ancrées (avec l'ancre de la propriété IDE) aux côtés de la fenêtre afin que l'agrandissement de la fenêtre remplisse toujours bien la zone du client: P>
p>
dans cet état (Windows client maximisée) L'utilisateur ouvre une fenêtre différente ou une nouvelle fenêtre enfant, mais les nouveaux contrôles de la fenêtre ne sont pas étirés, que S'agit-il de ne pas "comprendre" ils devraient s'étirer! p>
< / p>
Ceci est particulièrement gênant, car si l'utilisateur tente de restaurer la fenêtre, les commandes sont étirées. Ils disparaissent donc (voir il n'y a plus que ListView)! P>
p>
est-ce un bug? Comment puis-je resoudre ceci? P>
Edit: selon le commentaire de Hans Passant, j'ai créé un nouveau projet simple et cela a fonctionné comme il le devrait. J'ai donc enquêté pour voir ce qui était différent de mon vrai projet et de l'échantillon. La différence est que dans mon projet, je crée des formulaires de manière dynamique. P>
Je crée de manière dynamique de nombreux boutons sur une barre d'outils. Lorsque l'utilisateur clique sur un bouton, il s'agit du code qui est exécuté: p> c'est-à-dire que le nom du formulaire est dans la balise du bouton. Je crée une nouvelle instance du formulaire, avec Je suis Assurez-vous que le problème est dans cette création de formulaire dynamique de l'enfant, mais je ne peux pas obtenir où. P> EDIT2:
Trouvé! Dans mon formulaire Evénement de chargement commun, je faisais p> au lieu de false, j'aurais dû écrire true: si simple, je suis désolé. p> p> activator.createinstance (formType) code> puis je le montre: f.show () code>. P> myform.resumelayout (vrai) code> p> p> p> P>
4 Réponses :
Je pense que ce que vous voudrez peut-être réaliser est fait en utilisant
this.LayoutMdi(MdiLayout.TileHorizontal);
+1 pour "garder à l'esprit que les mises en page des MDI sont généralement découragées."
Le problème n'est pas la disposition MDI, c'est l'ancrage que, pour une raison quelconque, ne fonctionne pas lorsqu'une fenêtre commence Maximisée.
Mes commandes sont correctement ancrées (avec l'ancre de la propriété IDE) P> blockQuote> blockQuote>
Peut-être essayez peut-être instancer le formulaire et définissez les propriétés programmatisées dans l'événement de chargement. p>
Si une instance fonctionne, mais d'autres instances ne le font pas, cela signifie que vous devez inspecter les propriétés des formulaires instanciés avec le débogueur pour voir si elles sont bien définies comme vous l'attendez. P>
J'ai trouvé la solution, (merci Cody Grey de suggérer de poster ma propre réponse ici).
Dans mon formulaire Evénement de charge commun, je faisais: p>
myform.SuspendLayout() '' various instructions myform.ResumeLayout(False)
J'utilisais un fichier DataGridView sur un formulaire enfant MDI avec les quatre côtés ancrés et il finirait correctement tant que la forme a été créée non maximisée. Si j'ai créé le formulaire pendant que d'autres enfants ont été maximisés, il est mal calculé et ne s'est jamais corrigé même si vous normalisez et redimensionnez la forme manuellement. Ma solution consistait à placer un panneau sur la forme avec les quatre côtés ancrés et placez le DGV dans le panneau avec Dock Set to File. Je ne sais pas pourquoi je devais faire cela, mais cela a réparer le problème. P>
Sans surveillance des coups d'écran. Publiez un petit projet de reproduction qui présente ce comportement à un service de partage de fichiers.