ventana mostrar modal formularios formulario form emergente ejemplo c# winforms modal-dialog mdi

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í).