2010-02-07 15 views
15

Ich habe ein Windows-Formular, von dem ich ein Statusformular öffnen möchte, dass "Saving ..." sagt und dann verschwindet, wenn das Speichern abgeschlossen ist. Ich möchte dieses kleine Statusformular in der Mitte des Anrufformulars zentrieren. Ich habe versucht, die "StartPosition" -Eigenschaft auf "CenterParent" zu setzen, aber es funktioniert. Ich schaffe den Status Form von der anderen Form in etwa so:Setze das übergeordnete Element eines Formulars

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

Würde die Berufung Form nicht der "Parent"? Wenn ich eine Uhr zum Speichern einstelle, sagt sie, dass sie kein Elternteil hat.

Ich habe versucht:

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

und es gibt eine Ausnahme aus "Top-Level-Steuerung kann nicht auf eine Kontrolle hinzugefügt werden."

Wie zentriere ich dieses Statusfenster im aufrufenden Fenster? diese

Vielen Dank im Voraus

+0

Die Show .. Schlaf .. Schließen .. Code ist nicht garantiert, um tatsächlich etwas zu zeigen. Auch dein UI-Thread hängt während des Ruhezustands, sodass es zu UI-Störungen kommen kann. – CodingBarfield

Antwort

14

i so etwas tun würde:

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

In SavingForm würde ich einen Timer in der Ladeprogramm starten, die für 500 Millisekunden ausgeführt wird und dann das Formular schließt, wenn Sie fertig sind. Auf diese Weise reinigen. ShowDialog wird auch Ihre Benutzeroberfläche sperren, um nur das Speichern-Formular anzuzeigen und dem Benutzer nicht zu erlauben, mit irgendetwas zu verfallen.

+0

Es scheint keine "Form" zu geben, die einen Besitzer nimmt? http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx – Blorgbeard

+0

@ Blorgbeard: Gute Augen. Ich habe 'this' in die falsche Methode (schrieb dies ohne einen IDE/Compiler handy). Siehe meine Bearbeitung. Ich meinte 'savingForm.ShowDialog (this);' –

12

Verwendung:

saving.Show(this); 

den Eigentümer setzen, wenn Sie das Formular anzuzeigen.

Edit: Die ShowDialog() Methode auch eine Überlastung hat, der uns geben Sie den Eigentümer, wenn das der Weg Sie gehen zu entscheiden ist:

saving.ShowDialog(this); 
+13

Dies legt den "Besitzer" und nicht den "Elternteil" fest, bei denen es sich um verschiedene Optionen handelt. – VitalyB

+0

Genau. Wenn Sie beispielsweise Ihr Form2 in Form1 angedockt haben und Sie Form3 öffnen, ist der Eigentümer Form1 und nicht Form2! – LuckyLuke82

Verwandte Themen