2009-07-31 7 views
1

J'ai une application avec une forme principale qui agit comme une sorte de cadre et une zone à l'intérieur du formulaire principal où j'ouvre d'autres formes. Ces formulaires ne doivent pas être fermées jamais alors quand un nouveau est ouvert j'utilise ce code pour l'ouvrir pour la première fois:Form.Show() déplace légèrement la position du formulaire

frm.WindowState = FormWindowState.Maximized; 
frm.BringToFront(); 

Et puis si une autre forme s'ouvre au-dessus de cela et je dois montrer Je viens d'utiliser à nouveau:

frm.Show(); 

le problème est quand j'ouvre la forme la première fois son positionnement parfaitement et les frontières alignent bien. Quand j'utilise frm.Show() pour le ramener, il le déplace légèrement vers la gauche et vers le bas. Toute idée pourquoi?

Répondre

2

A partir de vos explications, je comprends que vous utilisez un formulaire parent pour contenir les formulaires enfants MDI (corrigez-moi si je me trompe)

Lorsqu'un nouveau formulaire enfant MDI est montré, il est placé de telle sorte que l'enfant les formulaires sont en "cascade", c'est-à-dire que chaque forme enfant est à la même position que la précédente plus un décalage. Lorsque vous cachez un formulaire enfant et que vous le réaffichez, le conteneur MDI considère probablement qu'il s'agit d'un nouveau formulaire enfant et qu'il place en conséquence ...

Je pense que vous devez enregistrer l'emplacement du formulaire enfant avant de le masquer , de sorte que vous pouvez restaurer quand vous le montrer à nouveau

+0

Donc, pour tous les 20 formes environ, je devrais enregistrer chaque emplacement et suivre? Ou y a-t-il un moyen de juste dire frm.Show() à cet endroit précis? – novacara

+0

Vous pouvez suivre l'emplacement dans le code du formulaire enfant lui-même ... Encore mieux, si vous avez différents types de formulaire enfant, créez une classe MdiChild de base qui gère cela et en hérite –

5

vous devez définir la propriété StartPosition à « manuel » dans la fenêtre des propriétés du formulaire

ou

frm.StartPosition = System.Windows.Forms.FormStartPosition .Manuel;

Questions connexes