mostrar - showdialog c# ejemplo
¿Diferencia entre la propiedad.Owner y ShowDialog(propietario de IWin32Window)? (1)
Supongo que el propietario de un winform se puede establecer explícitamente a través de la propiedad .Owner O pasando al propietario en el método ShowDialog sobrecargado (propietario de IWin32Window)
No puedo entender por qué estos métodos muestran un comportamiento diferente cuando se trabaja con formularios MDI .
Creé un MDIParent y un MDIChild.
También tengo un winform simple MyDialogBox que muestra su propietario en carga.
MessageBox.Show("Dialog''s owner is " + this.Owner.Name);
Método A: en la carga de MDIChild tengo el siguiente código, que hace que el propietario de MyDialogBox se establezca en MDIChild
MyDialogBox box = new MyDialogBox();
box.Owner = this; // Set owner as MDIChild
box.ShowDialog();
Método B - Alternativamente, en el método de carga de MDIChild tengo el siguiente código, que hace que el propietario de MyDialogBox se establezca en MDIParent
MyDialogBox box = new MyDialogBox();
box.ShowDialog(this); // Pass MyMDIChild as owner
También leo lo siguiente aquí
Solo el formulario primario MDI puede ser propietario de otro formulario, ya sea un elemento secundario MDI, un cuadro de diálogo modal o un formulario en el que el padre se configuró como el parámetro Owner.
Si es así, el Método A no debería funcionar en absoluto, ¿no es así?
¿Qué me estoy perdiendo? ¿Por qué el método B no establece al propietario en MDIChild?
Viendo las diferencias de estas 2 opciones usando Reflector, parece que tienen una implementación ligeramente diferente: box.Owner = this
solo asigna el valor provisto de esto al campo propietario interno. Sin embargo, al llamar a ShowDialog(IWin32Window)
, la implementación realiza la siguiente llamada, antes de asignar el valor:
owner = ((Control) owner).TopLevelControlInternal;
Esto podría resultar en la asignación del MDIParent.
( Nota : estoy lejos de ser un experto en MDI, así que podría estar equivocado aquí).