Saltar al contenido

Form.ShowDialog() o Form.ShowDialog(esto)?

Nuestros mejores desarrolladores agotaron sus reservas de café, en su búsqueda todo el tiempo por la respuesta, hasta que Linda halló el resultado en Bitbucket por lo tanto en este momento la compartimos con nosotros.

Solución:

Una molestia que encontré con ShowDialog() contra ShowDialog(this).

Ejecute TestApp, muestre el newform.ShowDialog(), haga clic en “mostrar escritorio” en la barra de tareas o en la barra de herramientas de inicio rápido, haga clic en TestApp en la barra de tareas. Muestra el Mainform. Tienes que hacer Alt-Tab para llegar a tu nueva forma.

contra

Ejecute TestApp, muestre el newform.ShowDialog(this), haga clic en “mostrar escritorio” en la barra de tareas o en la barra de herramientas de inicio rápido, haga clic en TestApp en la barra de tareas. Muestra la nueva forma en la parte superior.

Solo para comprender mejor la relación propietario-propiedad:

.NET permite que un formulario sea “propietario” de otros formularios. Los formularios propios son útiles para la caja de herramientas flotante y las ventanas de comandos. Un ejemplo de formulario propio es la ventana Buscar y reemplazar en Microsoft Word. Cuando se minimiza una ventana de propietario, los formularios de propiedad también se minimizan automáticamente. Cuando un formulario propio se superpone a su propietario, siempre se muestra en la parte superior.

(c) “Pro .NET 2.0 Windows Forms and Custom Controls” por Matthew MacDonald.


Como Mostrar diálogo muestra la nueva forma, un se establece una relación implícita entre el formulario actualmente activo, conocido como formulario de propietario, y el nuevo formulario, conocido como formulario de propiedad. Esta relación garantiza que el formulario de propiedad sea el formulario activo y siempre se muestre encima del formulario de propietario.

Una característica de esta relación es que el formulario de propiedad afecta el comportamiento de su formulario de propietario (cuando se usa Mostrar diálogo):

  • El formulario de propietario no se puede minimizar, maximizar ni mover.
  • El formulario de propiedad bloquea la entrada del mouse y el teclado en el formulario de propietario.
  • El formulario de propietario se minimiza cuando el formulario de propiedad lo está.
  • Solo se puede cerrar el formulario propio.
  • Si se minimizan tanto el propietario como los formularios propios y si el usuario presiona Alt+Tab para cambiar al formulario propio, se activa el formulario propio.

Sin embargo, a diferencia del método ShowDialog, una llamada al Show método no establece una relación de propiedad implícita. Esto significa que cualquiera de los dos formularios puede ser el formulario actualmente activo.

Sin una relación propietario-propiedad implícita, los formularios propietario y propiedad pueden minimizarse, maximizarse o moverse por igual. Si el usuario cierra cualquier formulario que no sea el principal, se reactiva el último formulario activo.

Aunque ShowDialog establece una relación implícita de propiedad del propietario, no hay una forma integrada para que el formulario propio vuelva a llamar o consulte el formulario que lo abrió. En el caso no modal, puede establecer la propiedad Propietario del nuevo formulario para establecer la relación propietario-propiedad. Como método abreviado, podría pasar el formulario de propietario como argumento a una sobrecarga del método Show, que también toma un parámetro IWin32Window (IWin32Window se implementa mediante objetos de interfaz de usuario de Windows Forms que exponen una propiedad Win32 HWND a través de la propiedad IWin32Window.Handle).

El comportamiento de los formularios en una relación de formulario de propiedad del propietario modal explícita es el mismo que su contraparte modal implícita, pero la relación de propiedad del propietario sin modelo proporciona un comportamiento adicional en el caso sin modelo de propiedad del propietario. En primer lugar, el formulario de propiedad no modal siempre aparece encima del formulario de propietario, aunque cualquiera de los dos puede estar activo. Esto es útil cuando necesita mantener un formulario, como una ventana de herramientas flotante, encima de otros formularios dentro de una aplicación. En segundo lugar, si el usuario presiona Alt+Tab para cambiar del propietario, los formularios propios hacen lo mismo. Para asegurarse de que el usuario sepa qué formulario es el formulario principal, al minimizar el propietario se ocultan los botones de la barra de tareas para todos los formularios propios, dejando visible solo el botón de la barra de tareas del propietario.

(c) “Programación de Windows Forms 2.0” por Chris Sells, Michael Weinhardt.

“Ventana actualmente activa” generalmente se refiere a la ventana de primer plano, pero solo si pertenece al subproceso actual; consulte GetActiveWindow en MSDN.

(La información real está en el contenido de la comunidad, pero el comentarista tiene razón en que no hay una “ventana activa por subproceso”, AFAIK).

Entonces, cuando el usuario cambia a otra ventana de aplicaciones (o subprocesos), termina con una “ventana predeterminada”. Incluso si .NET hace algo de magia aquí, la modalidad se romperá: la ventana principal prevista no se deshabilita (por ejemplo, puede cambiar a su ventana principal y cerrarla o modificar algo, lo que a menudo interrumpe su aplicación debido a la reingreso) .

Además, si otra aplicación está actualmente activa, su cuadro de diálogo no se mostrará en la parte superior, sino que se ocultará detrás de otra ventana.

Como molestia menor, la posición inicial suele ser incorrecta o engañosa.

Sin embargo, en la práctica, esto sucede rara vez: si abre el cuadro de diálogo en respuesta a un menú o hace clic en un botón en su ventana principal, el usuario prácticamente nunca logrará cambiar a otra ventana.

Sin embargo, es técnicamente posible y es muy probable que suceda si abre el cuadro de diálogo en respuesta a alguna automatización, mensaje externo, etc.

Si tienes algún contratiempo o forma de limar nuestro post te evocamos añadir una observación y con gusto lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *