web-dev-qa-db-fra.com

Comment puis-je contrôler l'emplacement d'une boîte de dialogue lorsque j'utilise ShowDialog pour l'afficher?

C'est un problème très trivial mais je n'arrive pas à trouver un moyen de le résoudre. Cela m'énerve parce que je pense que je devrais connaître la réponse à cela, mais je recherche soit les mauvais termes, soit les mauvaises méthodes et propriétés.

J'ai une boîte de dialogue de configuration appelée depuis deux endroits.

Le premier provient du bouton du formulaire qui fonctionne correctement - comme vous vous en doutez.

Le second provient d'un menu contextuel sur le notifyIcon dans la barre d'état système, mais ici il apparaît en haut à gauche de l'écran. Idéalement, je voudrais qu'il apparaisse centré sur l'écran principal, ou peut-être proche de la barre d'état système.

  • J'ai essayé de définir le Location, mais cela semble être remplacé lorsque dialog.ShowDialog() est appelé.

  • J'ai essayé d'utiliser la surcharge dialog.ShowDialog(IWin32Window), mais cela ne semblait pas m'aimer passer null comme poignée de fenêtre.

  • J'ai essayé d'utiliser dialog.Show() à la place, mais (et c'est là que je peux me tromper) la définition de l'emplacement ne semble pas donner des résultats cohérents.

  • J'ai même essayé de régler le dialog.Parent propriété - qui a bien sûr soulevé une exception.

Je sais juste que je vais réaliser que la réponse est évidente quand je (espérons-le) voir des réponses, mais pour le moment je suis complètement bloqué.

Merci pour les réponses - comme je le soupçonnais, c'était évident, mais comme d'habitude, je me suis retrouvé coincé à chercher le mauvais chemin. La chose encore plus ennuyeuse est que j'ai également utilisé cette propriété du concepteur.

37
ChrisF

Vous pouvez définir le Form.StartPosition propriété à FormStartPosition.Manual puis définissez le Form.Location propriété à l'emplacement souhaité. Lorsque vous appelez ShowDialog, le formulaire doit apparaître à l'emplacement souhaité.

MyForm frm = new MyForm();
frm.StartPosition = FormStartPosition.Manual;
frm.Location = new Point(10, 10);
frm.ShowDialog();
48
heavyd

Je suppose que vous utilisez un formulaire, auquel cas vous pouvez utiliser l'énumération Form.StartPosition. Vous pouvez en savoir plus ici et le comportement d'énumération ici .

21
micahtan

Essayez la propriété StartPosition sur le formulaire.

5
Max Schmeling