Comportamiento Modal de formularios

Comportamiento Modal de formularios

Como contrapartida al anterior apartado tenemos los formularios de comportamiento modal, también denominados cuadros o ventanas de diálogo.

Un formulario modal, al ser visualizado, bloquea el paso a otros formularios de la aplicación hasta que no es cerrado (aceptado o completado) por el usuario.

Como ejemplo de estos formularios se acompaña el proyecto FormDialogos (hacer clic aquí para acceder al ejemplo), del que pasamos a describir su proceso de creación.

Este proyecto contiene un formulario MDI llamado frmPrincipal, y uno hijo con el nombre frmHijo, que abrimos mediante una opción de menú; la creación de este tipo de formularios se ha descrito en apartados anteriores.

A continuación añadimos un nuevo formulario al proyecto con el nombre frmDialogo, que también abriremos a través de la correspondiente opción de menú del formulario MDI.

Para que este formulario tenga un comportamiento modal, debemos mostrarlo ejecutando el método ShowDialog( ) de la clase Form. En el Código fuente 505 tenemos las instrucciones necesarias. Observe también el lector, cómo hasta que el formulario de diálogo no es cerrado, no se mostrará el mensaje que hay a continuación de la llamada a ShowDialog( ). Si además intentamos pasar al formulario hijo, en el caso de que esté abierto, no podremos.

Private Sub mnuDialogo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuDialogo.Click

' instanciar el formulario que mostraremos como un diálogo Dim ofrmDialogo As New frmDialogo()

© Grupo EIDOS 33. Formularios de interfaz múltiple (MDI)

' dar una posición al formulario ofrmDialogo.StartPosition = FormStartPosition.CenterParent ' mostrarlo de forma modal, como cuadro de diálogo ofrmDialogo.ShowDialog()

MessageBox.Show("Se ha cerrado el diálogo")

End Sub

Código fuente 505

Para cerrar un formulario modal podemos, al igual que para cualquier formulario, ejecutar su método Close( ). No obstante, un formulario de diálogo suele proporcionar, aunque esto no es obligatorio, los típicos botones para aceptar, cancelar, reintentar, etc.; de modo que una vez cerrado el formulario, podamos averiguar qué botón pulsó el usuario.

Podemos proporcionar este comportamiento en nuestros formularios modales, asignando a la propiedad DialogResult de la clase Form, uno de los valores del tipo enumerado DialogResult. Esto tendrá como efecto adicional el cierre del cuadro de diálogo.

Por lo tanto, vamos a añadir a nuestro formulario frmDialogo, dos controles Button: btnAceptar y btnCancelar, en los que escribiremos las instrucciones del Código fuente 506.

Private Sub btnAceptar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAceptar.Click

' asignar un valor a esta propiedad, ' cierra al mismo tiempo el formulario Me.DialogResult = DialogResult.OK

End Sub

Private Sub btnCancelar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCancelar.Click

' asignar un valor a esta propiedad, ' cierra al mismo tiempo el formulario Me.DialogResult = DialogResult.Cancel

End Sub

Código fuente 506

Como ayuda en la construcción de formularios modales de diálogo, la clase Form dispone de las propiedades AcceptButton y CancelButton, a las que podemos asignar sendos controles Button que serán ejecutados al pulsar las teclas [INTRO] y [ESCAPE] respectivamente.

Esto es lo que haremos en el formulario frmDialogo, asignando a AcceptButton el control btnAceptar, y en CancelButton asignaremos btnCancelar.

Finalmente, en el evento de la opción de menú que abre este formulario modal, correspondiente a frmPrincipal, añadiremos, tras la llamada a ShowDialog( ), el código que comprobará el resultado de la ejecución del formulario de diálogo. Ver el Código fuente 507.

Programación con Visual Basic .NET © Grupo EIDOS

Private Sub mnuDialogo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuDialogo.Click

' instanciar el formulario que mostraremos como un diálogo Dim ofrmDialogo As New frmDialogo() ' dar una posición al formulario ofrmDialogo.StartPosition = FormStartPosition.CenterParent ' mostrarlo de forma modal, como cuadro de diálogo ofrmDialogo.ShowDialog()

' comprobar lo que ha hecho el usuario ' en el cuadro de diálogo Dim Resultado As DialogResult Resultado = ofrmDialogo.DialogResult If Resultado = DialogResult.OK Then

MessageBox.Show("Datos del diálogo: " & _ ofrmDialogo.txtNombre.Text & " " & _ ofrmDialogo.txtApellidos.Text)

Else MessageBox.Show("Se ha cancelado el diálogo") End If

End Sub

Código fuente 507

La Figura 297 muestra el programa en ejecución. Como puede comprobar el lector, el formulario modal, debido a su comportamiento, no se encuentra limitado a los bordes del formulario MDI; pero depende de este último, ya que si intentamos pasar el foco a un formulario hijo, no podremos.

Figura 297. Formulario modal de diálogo en ejecución.

© Grupo EIDOS 33. Formularios de interfaz múltiple (MDI)