2010-02-07 27 views
15

Tengo un formulario de Windows desde el que me gustaría abrir un formulario de estado que dice "Guardar ..." y luego desaparece cuando se completa el guardado. Me gustaría centrar este pequeño formulario de estado en el medio del formulario de llamada. Intenté establecer la propiedad "StartPosition" en "CenterParent", pero funciona. Creo el formulario de estado de la otra forma como lo siguiente:Establecer el elemento primario de un formulario

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

¿No sería el formulario de llamada el "Padre"? Cuando configuro un reloj para guardar, dice que no tiene padre.

me trataron:

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

y lanza una excepción "control de nivel superior no se puede añadir a un control."

¿Cómo centrar esta ventana de estado en la ventana de llamada?

Gracias de antemano

+0

El código Show .. Sleep .. Close ... no está garantizado para mostrar realmente nada. Además, el hilo de la interfaz de usuario se bloquea durante la suspensión, por lo que podría presentar fallas en la interfaz de usuario. – CodingBarfield

Respuesta

14

me gustaría hacer algo como esto:

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

En SavingForm, iniciaría un temporizador en el controlador de carga que se ejecuta durante 500 milisegundos y luego cierra el formulario cuando haya terminado. Más limpio de esa manera. ShowDialog también bloqueará su UI para que solo muestre el formulario de guardado y no permita que el usuario se mueva de nada.

+0

No parece haber un formulario que requiera un propietario. http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx – Blorgbeard

+0

@Blorgbeard: buenos ojos. Puse 'this' en el método incorrecto (lo escribí sin un IDE/compiler a mano.) Vea mi edición. Quise decir 'savingForm.ShowDialog (this);' –

12

Use esto:

saving.Show(this); 

Para establecer el dueño cuando se presenta el formulario.

Editar: El método ShowDialog() también tiene una sobrecarga que te permite especificar el propietario si esa es la ruta que decide ir a:

saving.ShowDialog(this); 
+13

Esto establece el "Propietario" y no el "Padre", que son opciones diferentes. – VitalyB

+0

Exactamente. Por ejemplo, cuando tiene su Form2 anclado dentro de Form1 y abre Form3, ¡el propietario será Form1 y no Form2! – LuckyLuke82

Cuestiones relacionadas