2010-02-07 8 views
15

J'ai un formulaire Windows à partir de laquelle je voudrais ouvrir un formulaire d'état qui dit "Enregistrement ..." , puis disparaît lorsque l'enregistrement est terminé. Je voudrais centrer ce petit formulaire d'état au milieu du formulaire d'appel. J'ai essayé de définir la propriété "StartPosition" sur "CenterParent", mais cela fonctionne. Je crée la forme d'état de l'autre forme comme ceci:Définir le parent d'un formulaire

SavingForm saving = new SavingForm(); 
savingForm.Show(); 
Thread.Sleep(500); //Someone said this is bad practice ... why? 
savingForm.Close(); 

Ne serait-forme d'appel comme le « parent »? Lorsque je définis une montre pour l'enregistrer, elle indique qu'elle n'a pas de parent.

J'ai essayé:

SavingForm saving = new SavingForm(); 
saving.Parent = this; 
savingForm.Show(); 
Thread.Sleep(500); 
savingForm.Close(); 

et déclenche une exception « contrôle de niveau supérieur ne peut pas être ajouté à un contrôle. »

Comment centrer cette fenêtre d'état dans la fenêtre d'appel?

Merci à l'avance

+0

Le Show .. Sleep .. Fermer .. le code n'est pas garanti pour montrer quoi que ce soit. En outre, votre thread d'interface utilisateur se bloque pendant la mise en veille, ce qui peut entraîner des problèmes d'interface utilisateur. – CodingBarfield

Répondre

14

je ferais quelque chose comme ceci:

SavingForm saving = new SavingForm(); 
savingForm.ShowDialog(this); 

Dans SavingForm, je voudrais démarrer une minuterie dans le gestionnaire de charge qui s'exécute pendant 500 millisecondes, puis ferme le formulaire une fois terminé. Cleaner de cette façon. ShowDialog verrouillera également votre interface utilisateur pour afficher uniquement le formulaire d'enregistrement et ne pas autoriser l'utilisateur à utiliser n'importe quoi.

+0

Il ne semble pas y avoir un 'Form' ctor qui prend un propriétaire? http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx – Blorgbeard

+0

@Blorgbeard: Bons yeux. J'ai mis 'this' dans la mauvaise méthode (écrit ceci sans un IDE/compilateur à portée de main.) Voir mon edit. Je voulais dire 'saveForm.ShowDialog (this);' –

12

Utilisez ceci:

saving.Show(this); 

Pour définir le propriétaire lorsque vous affichez le formulaire.

Edit: La méthode ShowDialog() a aussi une surcharge qui vous permet de spécifier le propriétaire si tel est l'itinéraire que vous décidez d'aller:

saving.ShowDialog(this); 
+13

Ceci définit le "Propriétaire" et non le "Parent" qui sont des options différentes. – VitalyB

+0

Exactement. Par exemple, lorsque votre Form2 est ancré dans Form1 et que vous ouvrez Form3, le propriétaire sera Form1 et non Form2! – LuckyLuke82

Questions connexes