2010-02-07 9 views
15

Ho un modulo di Windows da cui vorrei aprire un modulo di stato che dice "Salvataggio in corso ..." e quindi scompare quando il salvataggio è completo. Vorrei centrare questo piccolo modulo di stato nel mezzo del modulo di chiamata. Ho provato a impostare "StartPosition" correttamente a "CenterParent", ma funziona. Creo il modulo di stato dall'altra forma in questo modo:Impostare il padre di un modulo

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

Non sarebbe la forma chiamante "Genitore"? Quando ho impostato un orologio per il salvataggio, dice che non ha un genitore.

ho provato:

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

e viene generata un'eccezione "controllo di livello superiore non può essere aggiunto a un controllo."

Come si concentra questa finestra di stato nella finestra di chiamata?

Grazie in anticipo

+0

The Show .. Sleep .. Close .. codice non è garantito per mostrare effettivamente qualcosa. Inoltre, il thread dell'interfaccia utente si blocca durante la sospensione, pertanto potrebbe presentare problemi di interfaccia utente. – CodingBarfield

risposta

14

vorrei fare qualcosa di simile:

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

In SavingForm vorrei avviare un timer nel gestore di carico che viene eseguito per 500 millisecondi e quindi chiude il modulo una volta terminato. Pulitore in questo modo. ShowDialog bloccherà anche l'interfaccia utente per visualizzare solo il modulo di salvataggio e non consentire all'utente di scimmiottare con qualsiasi cosa.

+0

Non sembra esserci un 'form'ctor che accetta un proprietario? http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx – Blorgbeard

+0

@Blorgbeard: Buoni occhi. Ho inserito 'questo' nel metodo sbagliato (ho scritto questo senza un IDE/compilatore a portata di mano.) Vedi la mia modifica. Intendevo 'savingForm.ShowDialog (this);' –

12

Utilizzare questa:

saving.Show(this); 

per impostare il proprietario quando si mostra la forma.

Edit: Il metodo ShowDialog() ha anche un sovraccarico che ti permette di specificare il proprietario se questo è il percorso che si decide di andare:

saving.ShowDialog(this); 
+13

Imposta il "Proprietario" e non il "Genitore" che sono diverse opzioni. – VitalyB

+0

Esattamente. ad esempio, quando il Form2 è ancorato in Form1 e si apre Form3, il proprietario sarà Form1 e non Form2! – LuckyLuke82

Problemi correlati