TEMA 2. DISEÑO DE FORMULARIOS WINDOWS 2.1. CONTROLES DEL FORMULARIO Formularios Windows La programación de aplicaciones para Windows se basa en formularios. De hecho, podemos decir que es la unidad básica en nuestro desarrollo. El formulario es lo que cualquiera de nosotros identifica como “la típica ventana de Windows”. De forma más rigurosa diremos que el formulario es un control derivado de la clase Form (espacio de nombres System.Windows.Forms.Form). El hecho de que las aplicaciones en Windows utilicen, en la mayoría de los casos, estos formularios es una ventaja, puesto que siempre usaremos los mismos métodos y propiedades para trabajar con ellos. Veamos el aspecto de este elemento creando un nuevo proyecto de aplicación para Windows con la ayuda de Visual Basic 2008 Express Edition. Programación .NET (II). Diseño de formularios Windows 2.1 Visual Studio nos ofrece diferentes plantillas en función del tipo de aplicación que queramos crear. En nuestro caso vamos a crear una aplicación Windows Forms (formularios Windows). La aplicación de Windows Forms recién creada constará de un único elemento llamado “Form1”. Este elemento es un control formulario. Nuestro formulario es una ventana de Windows común y corriente. Podemos cambiar su tamaño, minimizarla o cerrarla como cualquier ventana. Podemos probar el funcionamiento de la aplicación en cualquier momento con la opción "Iniciar Depuración" del menú "Depurar", pulsando sobre en la barra de herramientas, o simplemente pulsando F5. Los formularios y cualquier control de formulario va constar de: Propiedades Métodos Eventos Propiedades Todo control tiene un conjunto de propiedades que permitirán definir ciertas características del mismo que afectarán a su apariencia y comportamiento. 2.2 Programación .NET (II). Diseño de formularios Windows Algunas de estas propiedades son comunes a la mayoría de los controles y otras, sin embargo, específicas de cada uno de ellos. Las propiedades de los controles se pueden modificar desde la vista de diseño, directamente en la ventana de propiedades, o bien, como veremos más adelante, desde el código fuente de la aplicación (por ejemplo, añadiendo a nuestro código ‘Form1.Text = "Mi ventana"’). A continuación se muestran algunas de las propiedades del control formulario. Aunque no se describan aquí todas, es buena idea investigar el funcionamiento de las demás… Recuerda que siempre hay disponible una descripción de cada propiedad en la parte inferior de la ventana de propiedades. Algunas propiedades del formulario Propiedad Name Descripción Establece el nombre del formulario en el proyecto. AcceptButton Indica en qué botón del formulario se hace clic cuando el usuario pulse “Enter”. CancelButton Indica en qué botón del formulario se hace clic cuando el usuario pulse “Esc”. ForeColor Establece el color del texto que se muestre en el formulario. Icon Ruta al archivo de imagen que se mostrará como icono en la barra de título del formulario. Text Texto que se muestra en la barra de título del formulario MaximizeBox Establece si el formulario tendrá un botón “Maximizar” en la barra de título. MinimizeBox Establece si el formulario tendrá un botón “Minimizar” en la barra de título. BackColor Establece el color de fondo del cuerpo del formulario. Programación .NET (II). Diseño de formularios Windows 2.3 Métodos Los métodos de cualquier objeto proveen al mismo de ciertas funcionalidades, las cuales podrán ser utilizadas durante la ejecución de las aplicaciones. A continuación vemos algunos métodos importantes del control formulario. Al igual que las propiedades, es bueno profundizar e investigar otros métodos que, llegado el caso, nos pueden ofrecer la utilidad que andamos buscando. Algunos métodos del formulario Método Descripción Show() Visualiza el formulario. Se puede especificar su formulario “owner” o propietario. Si un formulario form1 es propietario de otro form2, form2 se visualizará siempre sobre form1, aunque haya cualquier otro formulario activo. Focus() Establece el foco en el formulario. Hide() Oculta el formulario al usuario. Close() Cierra el formulario. Eventos Ciertas acciones sobre un control pueden generar lo que llamamos eventos. Estos eventos se manipulan a través de sus manejadores (handler). Dicho de otra forma, un manejador de eventos es un objeto en el que un control delega la tarea de manipular cierto evento. Más adelante veremos como con los manejadores de eventos podremos programar las acciones que queramos realizar al producirse un evento concreto (al hacer clic sobre un botón, al cargar un formulario…). A continuación puedes ver algunos de los eventos de los formularios. 2.4 Programación .NET (II). Diseño de formularios Windows Algunos eventos del formulario Evento Load Descripción Sucede cuando el formulario se carga en memoria, antes de llegar a visualizarse. Activated Sucede cuando el formulario se activa, bien por código, bien por la acción del usuario. GotFocus El formulario recibe el foco. Cuando lo pierde, sucede su complementario LostFocus. Click Ocurre cuando el usuario hace clic con el ratón sobre el control. Si lo que se produce es un doble clic entonces el evento provocado será DoubleClick. Resize Ocurre cuando se cambia el tamaño del formulario. Move Move se produce cuando varía la posición del formulario en la pantalla. Veamos ahora un ejemplo del manejo de propiedades, métodos y eventos de un formulario. Empezamos estableciendo algunas propiedades del formulario. Para ello, accedemos a su ventana de propiedades pulsando con el botón derecho sobre la vista de diseño del formulario. Programación .NET (II). Diseño de formularios Windows 2.5 La ventana de propiedades se nos mostrará en la parte derecha de la pantalla. En ella podrás modificar los valores de las propiedades de cualquier control. 2.6 Programación .NET (II). Diseño de formularios Windows Realizamos los siguientes cambios en tres de las propiedades del formulario “Form1”: Propiedad Text Mi formulario Propiedad Icon files.ico (cualquier archivo de imagen en nuestro equipo) Propiedad BackColor Color de sistema GradientActiveCaption Observa cómo ha cambiado su apariencia: Para probar los manejadores de eventos del formulario, en primer lugar añadimos otro formulario al proyecto mediante el menú Proyecto - Agregar Windows Forms.... Lo llamamos “Form2.vb”. Vamos a hacer que se muestre el formulario Form2 al hacer doble clic sobre el formulario Form1. Accedemos al código fuente del formulario Form1: Programación .NET (II). Diseño de formularios Windows 2.7 En la ventana de código debes elegir el listado de eventos de Form1 y, a continuación, el evento del que deseas crear el manejador. En nuestro caso, el evento DoubleClick. Si el manejador no estaba creado ya, se creará su definición automáticamente: Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.DoubleClick End Sub 2.8 Programación .NET (II). Diseño de formularios Windows El código que escribamos dentro de este procediemiento se ejecutará al producirse el evento que maneja, en este caso, cuando el usuario haga doble clic sobre el formulario Form1. Nosotros queremos mostrar el formulario Form2, utilizamos el método Show de dicho formulario: Private Sub Form1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.DoubleClick Form2.Show() End Sub Controles del formulario Ya has tenido un primer contacto con los formularios, ahora es el momento de llenarlos de contenidos añadiendo controles. Los controles son un medio para que el usuario interactúe con nuestras aplicaciones. Por ejemplo, iniciando acciones al pulsar un botón o introduciendo algún dato a través de una caja de texto. Con Visual Basic 2008 es posible examinar los controles de Windows Forms desde el cuadro de herramientas, en la parte izquierda del entorno de desarrollo. Para agregarlos al formulario bastaría con arrastrarlos hasta el lugar deseado. Programación .NET (II). Diseño de formularios Windows 2.9 Todos estos controles se localizan en el espacio de nombres System.Windows.Forms, y sus respectivas clases son subclases de la clase Control. A continuación vamos a presentar los esenciales para casi cualquier aplicación. Como ya hemos comentado antes, todos los controles contarán con propiedades, métodos y eventos. El entorno de desarrollo de Visual Studio nos mostrará las propiedades de cualquier objeto que seleccionemos en la ventana de propiedades. Además, veremos que algunos controles ofrecen una ventana con las propiedades y acciones más comunes para configurarlos. Esta ventana es la ventana de tareas del control y es accesible haciendo clic en el icono que aparece tras seleccionar un control. Podremos ver los eventos de los controles en la ventana de propiedades (lista de eventos) o en la ventana de código. Además, si hacemos doble clic sobre cualquier control de la aplicación abriremos la ventana de código directamente en la implementación del evento predeterminado del control. Por ejemplo, si hacemos doble clic sobre un formulario iremos directamente a su evento “load”, o, al pusar sobre un botón, a su evento “click”. 2.10 Programación .NET (II). Diseño de formularios Windows Control Label - Etiqueta Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control sirve para mostrar un texto que no podrá ser modificado por el usuario. Este texto podrá tener varias líneas de longitud y su apariencia podrá modificarse a través de las propiedades del control. Las etiquetas serán útiles para presentar información diversa al usuario (títulos, instrucciones…). Algunas propiedades interesantes del control etiqueta Name: Nombre con el que nos referiremos al control en el código de la aplicación. Todos los controles tienen esta propiedad. Text: Texto que mostrará la etiqueta. BackColor: Valor del color de fondo de la etiqueta. Font: Fuente o tipo de letra con el que se visualizará el texto de la etiqueta ForeColor: Color del texto de la etiqueta. Programación .NET (II). Diseño de formularios Windows 2.11 Control TextBox - Caja de texto Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control permite al usuario escribir texto y visualizarlo. Se usan con mucha frecuencia para presentar formularios en los que el usuario puede rellenar una serie de datos. La propiedad a través de la que se puede visualizar y escribir el texto es Text, es su principal propiedad. Otras propiedades del control TextBox Name: Nombre con el que nos referiremos al control en el código de la aplicación. BackColor: Valor del color de fondo de la caja de texto. Font: Fuente o tipo de letra con el que se visualizará el texto en la caja. ForeColor: Color del texto de la caja. Multiline: Si esta propiedad de tipo booleano tiene valor true, permite que el texto de la caja ocupe más de un línea. Además podremos variar la altura del TextBox para controlar cuántas líneas serán visibles. 2.12 Programación .NET (II). Diseño de formularios Windows Control Button - Botón Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control es un botón sobre el que el usuario podrá pulsar. Lo lógico es que haya algún tipo de acción asociada a él, y que se ejecute cuando el usuario pulse el botón. Algunas propiedades del control Button Name: Nombre con el que nos referiremos al control en el código de la aplicación. Text: Texto que se mostrará sobre el botón. Pero lo realmente importante del botón son sus eventos: Algunos eventos del control Button Click: El evento Click se produce, como era de esperar, cuando el usuario hace clic sobre el botón. Es el evento principal del botón. MouseClick: Este evento es sensiblemente diferente al anterior. Sólo se producirá cuando el usuario haga clic sobre el botón exclusivamente con el ratón, no siendo así cuando el usuario pulse “enter” sobre un botón previamente enfocado. Programación .NET (II). Diseño de formularios Windows 2.13 Control CheckBox - Casilla de verificación Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control sirve para que el usuario pueda seleccionar determinada opción u opciones dentro de un grupo. Gráficamente, el control incluye, además de la casilla, una etiqueta con texto en la que podremos definir la opción que representa. Algunas propiedades del control CheckBox Name: Nombre con el que nos referiremos al control en el código de la aplicación. Text: Texto que acompaña a la casilla de verificación. Checked: Propiedad booleana que indica si la opción del control está seleccionada (verdadero) o no (falso). CheckedChanged: Se produce cuando el usuario ha cambiado el estado de selección del control CheckBox. Respecto a sus eventos, si duda el más importante es: CheckedChanged: Se produce cuando el usuario ha cambiado el estado de selección del control CheckBox. 2.14 Programación .NET (II). Diseño de formularios Windows Control RadioButton - Botón de opción Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control es un botón que puede estar activado o desactivado. Sirve para elegir una única opción entre varias posibles de un grupo. Esta sería la principal diferencia respecto al control CheckBox: con CheckBox podemos seleccionar varias opciones a la vez, con RadioButton sólo una de ellas. De la misma forma que con el control CheckBox, podemos establecer u obtener su estado a través de la propiedad Checked. También entre sus eventos cuenta con CheckedChanged, que funciona exactamente igual que con CheckBox y que, sin duda, será el que más utilizaremos. Control GroupBox - Marco Se encuentra en la sección “Contenedores” del cuadro de herramientas. Este control, por un lado, sirve para mejorar la estética de nuestro formulario, agrupando controles dentro de un marco. Esto puede favorecer la creación de una interfaz de usuario más intuitiva para el mismo, agrupando los controles y otros elementos de forma racional en el formulario. Además, nos servirá para formar grupos de controles de opción que funcionarán independientemente de otros posibles grupos. Una propiedad interesante para este control es Text, que es el texto asociado al control y que nos permitirá incluir un título o una descripción para la agrupación de controles que pueda contener. Programación .NET (II). Diseño de formularios Windows 2.15 Control PictureBox - Caja de imagen Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control sirve básicamente para mostrar una imagen de tipo BMP, ICO, JPEG, GIF o PNG. Su principal propiedad es Image, mediante la que establecemos el archivo de imagen a mostrar. Si queremos especificar la ruta a un disco o ubicación en la Web desde la que cargar la imagen podemos usar la propiedad ImageLocation. Otras propiedades del control PictureBox SizeMode: Mediante esta propiedad se establece cómo se visualizará la imagen y con qué tamaño. Admite los siguientes valores: Normal – Visualiza la imagen tal cual, si su tamaño es mayor que el establecido para el control la imagen se mostrará cortada. StrechImage – Fuerza el tamaño de la imagen al tamaño del control. AutoSize – Adapta el tamaño del control al de la imagen. CenterImage – Muestra la imagen centrada dentro del control. Zoom – Aumenta la imagen hasta llenar el tamaño del control. Size: Con Size podemos especificar el tamaño del control PictureBox, siempre teniendo en cuenta que, si hemos establecido la propiedad SizeMode a Autosize, en ningún caso podremos hacer que el tamaño del control sea inferior al de la imagen. 2.16 Programación .NET (II). Diseño de formularios Windows Controles ListBox y ComboBox - Lista desplegada y lista desplegable Se encuentran en la sección “Controles comunes” del cuadro de herramientas. Tratamos ambos controles juntos debido a sus similitudes. Ambos controles permiten establecer una lista de elementos de la que el usuario podrá elegir uno o varios haciendo clic sobre ellos. La principal diferencia entre ambos es que ListBox presenta la lista desplegada, mientras que ComboBox combina una caja de texto y una lista desplegable. Principales propiedades Items: Es sin duda la porpiedad más importante de ambos controles. Nos permite acceder a la colección de elementos de nuestra lista. Además, a partir de esta propiedad tendremos acceso a métodos que nos permitirán manipularla (Add, Clear, Remove, Insert…), como veremos más adelante. SelectionMode: Exclusiva de ListBox. Permite establecer el modo en que el usuario podrá seleccionar los elementos de la lista. Admite los siguientes valores: One - Sólo se podrá seleccionar un único elemento a la vez. MultiSimple - Selección múltiple con cada clic sobre los elementos. MultiExtended - Selección múltiple con la combinación de clic sobre los elementos y las teclas shift o control. El evento que más vamos a usar de estos dos controles es SelectedIndexChanged. Este evento se produce cada vez que el usuario selecciona un elemento de la lista. Programación .NET (II). Diseño de formularios Windows 2.17 Control TabControl - Pestañas Se encuentra en la sección “Contenedores” del cuadro de herramientas. Este control permite distribuir en él los controles organizados en diferentes pestañas. Es muy útil cuando necesitamos incluir muchos controles en un formulario pequeño, o bien cuando ya no nos basta con controles GroupBox para mostrar el contenido del formulario de una forma organizada. Esto último siempre será bien valorado por los usuarios de nuestra aplicación. El control TabControl se compone a su vez de TabPages, las cuales son cada una de las pestañas que queramos incluír. Desde el punto de vista del código las pestañas son a su vez controles, con sus propiedades, métodos y eventos. Podemos agregar a un TabControl todas las TabPages que necesitemos. Cada pestaña o TabPage cuenta con la propiedad Text en la que podemos establecer el texto que se mostrará en el borde de la pestaña. Los controles que coloquemos sobre una pestaña serán visibles al usuario sólo cuando la pestaña esté seleccionada. 2.18 Programación .NET (II). Diseño de formularios Windows Control DateTimePicker - Calendario Se encuentra en la sección “Controles comunes” del cuadro de herramientas. Este control permite seleccionar una fecha y hora de forma sencilla. Algunas propiedades del control DateTimePicker Value: Devuelve o establece el valor de la fecha / hora seleccionadas. MinDate, MaxDate: Respectivamente, fecha mínima y máxima que se puede seleccionar. Y para cambiar el aspecto del calendario se puede modificar las propiedades ForeColor, Font, TitleBackColor, TitleForeColor, TrailingForeColor, y BackColor. Respecto a los eventos de DateTimePicker cabe destacar: ValueChanged: Se produce cuando el usuario ha cambiado el valor de la fecha. Programación .NET (II). Diseño de formularios Windows 2.19 2.2. DISEÑO DEL FORMULARIO A la hora de distribuir los controles que necesitamos en un formulario no basta con ir añadiéndolos en cualquier parte del mismo. Los formularios y sus controles formarán parte de la interfaz gráfica de usuario (GUI, Graphic User Interface), es decir, serán la parte de nuestra aplicación con la que el usuario interactuará, y, por lo tanto debemos diseñarlos de la forma más racional e intuitiva posible. Por ello, antes de lanzarnos al diseño de formularios debemos tener en cuenta ciertas consideraciones previas. La ley de Fitts es un modelo matemático sobre el movimiento humano. A grandes rasgos, podríamos decir que predice el tiempo necesario en moverse rápidamente desde una posición inicial a una zona destino final, en función de la distancia entre ambos puntos y el tamaño de la zona final. No vamos a entrar en demostraciones matemáticas, sólo nos quedamos con las aplicaciones que esta ley tiene para el diseño de la interfaz gráfica de aplicaciones informáticas. Ley de Fitts aplicada al diseño de formularios Los controles deben tener un tamaño razonable para que sea fácil pulsar sobre ellos. La distancia entre posibles opciones debe ser la mínima posible, dentro de lo estéticamente aceptable. De la misma forma, si hay que dar una serie de pasos para completar una tarea, éstos deben estar próximos entre sí. Las opciones similares o relacionadas deben estar agrupadas. No colocar barreras al usuario. Lanzar ventanas adicionales sólo si es necesario y son útiles. No abrumar al usuario con demasiadas opciones. 2.20 Programación .NET (II). Diseño de formularios Windows Ya que conoces algunos controles y tienes ciertas directivas sobre cómo distribuirlos en el formulario, te proponemos diseñar un sencillo formulario con algunos de ellos. Después nos ocuparemos de añadirle funcionalidad. Verás paso a paso cómo diseñamos el formulario. Es recomendable que abras un nuevo proyecto de Windows Forms con Visual Basic Express y los sigas. Lo que proponemos es una aplicación con un único formulario, en el que podamos modificar el tipo de letra, tamaño y color del texto de una etiqueta. Para abordar este proyecto lo primero que haremos es estimar qué objetos o controles necesitaremos en nuestra interfaz: Un formulario que contenga la interfaz. La etiqueta sobre la que haremos las modificaciones de formato. Una caja de texto para introducir el tamaño del texto. Casillas de verificación para indicar si el texto está en cursiva o en negrita. Un control que nos permita elegir colores. En la sección “cuadros de diálogo” del cuadro de herramientas encontramos el control ColorDialog. Un botón para aplicar el formato a la etiqueta. El ejemplo que realizaremos a continuación es una pequeña muestra que parte de un nuevo proyecto de Windows Forms al que hemos llamado “FormatoTexto”. Vamos a empezar a añadir controles al formulario. La forma más sencilla de hacerlo es arrastrando el contro desde el cuadro de herramientas. Programación .NET (II). Diseño de formularios Windows 2.21 En todo momento podremos variar la posición de un control, arrastrándolo, y su tamaño, estirando con el ratón de los cuadros situados en los bordes y esquinas del control. Una vez añadidos los controles necesarios y ajustado su tamaño y forma, pasaríamos a modificar aquellas propiedades que sean necesarias para terminar de establecer sus características. Ya sabes que las propiedades de un formulario, y cualquier control, están disponibles en la ventana propiedades, tras seleccionar el control. Si esta ventana no estuviera visible podemos verla pulsando sobre el control con el botón derecho del ratón y seleccionando propiedades en el menú emergente. 2.22 Programación .NET (II). Diseño de formularios Windows Añadimos todos los controles necesarios para nuestro ejemplo: Las propiedades que hemos especificado para cada uno son las siguientes: Control Label para modificar formato Propiedad Name EtiquetaPrueba Propiedad Text Texto Prueba Control GroupBox Propiedad Text Formato Programación .NET (II). Diseño de formularios Windows 2.23 Control ComboBox Propiedad Name TipoFuente Propiedad DropDownStyle DropDownList Control TextBox Propiedad Name TamañoTexto Control Label para la selección de color Propiedad Propiedad Propiedad Propiedad Name Color AutoSize False BackColor Black (web) Text (vacío) Botón para cambiar de color Propiedad Name CambiarColor Propiedad Text Cambiar Control CheckBox para cursiva Propiedad Name Cursiva Propiedad Text Cursiva 2.24 Programación .NET (II). Diseño de formularios Windows Control CheckBox para negrita Propiedad Name Negrita Propiedad Text Negrita Botón para aplicar el formato a la etiqueta Propiedad Name CambiarColor Propiedad Text Cambiar Con nuestra interfaz creada, si pruebas la aplicación, te darás cuenta de que aún nos falta un pequeño detalle. Y es que la lista desplegable para seleccionar el tipo de fuente está vacía. Vamos a añadir a la lista tres tipos de letra distintos: Arial Times New Roman Verdana Para ello, abrimos la ventana de tareas del comboBox “TipoFuente” y seleccionamos Editar elementos. Programación .NET (II). Diseño de formularios Windows 2.25 En la ventana que se abre escribimos los elementos que queremos en la colección, uno por línea: Crear controles dinámicamente Además de en tiempo de diseño, podemos crear nuevos controles en nuestra aplicación durante su ejecución, sólo hay que escribir el código para crearlos. No olvidemos que los controles son objetos y, como tales, pueden ser creados invocando al constructor de su clase. También podremos establecer los valores deseados para sus propiedades con la notación Objeto.propiedad = valor. Desde los entornos de desarrollo Visual Basic Express o Visual Studio vamos a contar siempre con la tecnología intellisense que listará los miembros (propiedades, métodos…) de cualquier objeto al escribir un punto a continuación de su nombre. Esto nos facilita el trabajo enormemente, ya que podemos localizar cualquier miembro del objeto fácilmente. 2.26 Programación .NET (II). Diseño de formularios Windows Observa el código que se muestra a continuación. En él se crea una instancia de la clase Label llamada “etiqueta”, se inicializan algunas de sus propiedades y, por último, se añade a la colección de controles del formulario o cualquier objeto contenedor. 'Declaramos la variable y creamos el objeto con New Dim etiqueta As New Label 'Definimos algunas propiedades etiqueta.Text = "Hola!!" etiqueta.ForeColor = Color.DarkBlue etiqueta.Font = New Font("Arial", 14) 'Añadimos la etiqueta a la colección de controles Controls.Add(etiqueta) Normalmente resultará más sencillo añadir los controles en tiempo de diseño y con ayuda de un entorno de desarrollo como Visual Studio. No obstante, siempre podremos recurrir a la creación dinámica de controles cuando nos veamos obligados a crearlos bajo ciertas condiciones conocidas durante la ejecución. Programación .NET (II). Diseño de formularios Windows 2.27 2.3. IMPLEMENTACIÓN DE FUNCIONALIDAD Ya tenemos nuestro formulario preparado. Todos los controles necesarios están en su sitio. Si iniciamos nuestra aplicación, veremos que el funcionamiento de los controles es el mínimo, cuando no nulo. Siguiendo nuestro ejemplo, podemos elegir un tipo de fuente o seleccionar un color, pero no se aplican estos cambios al texto. Como ya supondrás, lo siguiente que debemos hacer es establecer las acciones a realizar cuando el usuario interactúe con los controles de nuestro formulario. Esto es, añadirles funcionalidad. Ya hemos hablado sobre los eventos de los controles. Cuando sobre un objeto de nuestra aplicación ocurre un suceso (por ejemplo, el usuario hace clic sobre un botón, cambia el texto de una caja de texto…) se produce un evento. Si queremos que nuestra aplicación realice alguna acción al producirse un evento, nos corresponde a nosotros escribir un método que responda a ese evento. Por ejemplo, queremos que, cuando el usuario pulse sobre un botón (evento click), se muestre un diálogo para elegirlo (control ColorDialog). 2.28 Programación .NET (II). Diseño de formularios Windows Imagina que en un formulario tenemos un botón llamado (propiedad Name) “Boton” y un control ColorDialog llamado “DialogoColor”, lo que habrá que hacer para que el botón muestre el diálogo será lo siguiente: Implementar el método para el evento click del botón. El evento click es el evento predeterminado del control botón, por ello, bastará con hacer doble clic sobre el botón en la vista de diseño para que nos muestre la ventana del código con la declaración del método creada. Añadir el código que queramos ejecutar cuando se produzca el evento click. En nuestro caso queremos mostrar el diálogo de color. El control ColorDialog cuenta con un método propio llamado ShowDialog que realiza esta función. Tras esto, el código correspondiente al manejador del evento click del botón quedaría de la siguiente forma: Private Sub Boton_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Boton.Click DialogoColor.ShowDialog() End Sub Observa lo siguiente: El manejador que hemos creado se llama Boton_Click, y recibe dos parámetros, sender y e. El parámetro sender hace referencia al objeto que generó el evento. El parámetro e proporciona información del evento. Programación .NET (II). Diseño de formularios Windows 2.29 En la parte final de la declaración pone Handles Boton.Click. Esta cláusula indica (literalmente) que el método llamado Boton_Click maneja el evento click del control Boton. Los manejadores de eventos son llamados también delegados y son objetos de la clase EventHandler del espacio de nombres System. En otras palabras, la sentencia Handles Boton.Click hace que se ejecute Boton_Click cuando se pulse sobre el botón Boton. Por último, dentro del manejador hacemos la llamada al método ShowDialog del control DialogoControl. En Visual Basic la forma general de referirse a una propiedad de un objeto es Objeto.Propiedad. Esto mostrará el diálogo al usuario. Como ya hemos visto, cláusula Handles sirve para indicar qué método manejará determinado evento. Si usamos Handles al final de la declaración del método, lo asociamos al evento durante la compilación de la aplicación, antes de su ejecución. Existe otra forma de vincular métodos a eventos de forma dinámica, esto es, en el transcurso de la ejecución: Mediante las sentencias AddHandler, para vincular y RemoveHandler, para desvincular. Sus respectivas sintaxis son las siguientes: AddHandler miObjeto.Evento, AddressOf Manejador RemoveHandler miObjeto.Evento, AddressOf Manejador Esto puede ser útil si se quiere asignar un manejador a determinado evento sólo si se dan ciertas condiciones durante la ejecución de la aplicación. 2.30 Programación .NET (II). Diseño de formularios Windows Ejemplo: Private Sub Pulsa_Boton(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Boton.Click DialogoColor.ShowDialog() End Sub ¡Ambos fragmentos de código son equivalentes! Private Sub Pulsa_Boton(ByVal sender As System.Object, _ ByVal e As System.EventArgs) DialogoColor.ShowDialog() End Sub […] AddHandler Boton.Click, AddressOf Pulsa_Boton Si volvemos a nuestro caso de ejemplo, ¿qué acciones necesitamos implementar en nuestra aplicación “FormatoTexto”? Acción 1: El botón “CambiarColor” debe abrir el diálogo de color “DialogoColor” y poner el color seleccionado en éste como color de fondo de la etiqueta “Color” para que el usuario vea el color seleccionado actualmente. Acción 2: El botón “BotonAplicar” debe aplicar todos los valores de formato seleccionados a la etiqueta “EtiquetaPrueba”. Programación .NET (II). Diseño de formularios Windows 2.31 Cómo abrir “DialogoColor” al hacer clic en “CambiarColor”. Implementamos el manejador del evento click del botón “CambiarColor” (doble clic sobre el control). Añadimos el código para abrir el diálogo de color. Si recuerdas, al inicio del apartado, usábamos el evento ShowDialog. Pero no basta con mostrar el diálogo, si el usuario elige un color, hay que mostrarlo de fondo en la etiqueta “Color”. El método quedaría implementado como se muestra a continuación. Private Sub CambiarColor_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles CambiarColor.Click If DialogoColor.ShowDialog = Windows.Forms.DialogResult.OK Then Color.BackColor = DialogoColor.Color End If End Sub Este código vendría a expresar: “Si el usuario pulsa Aceptar en el dialogo de color entonces asigna el color elegido a la propiedad color de fondo de la etiqueta ‘Color’ ”. Cómo aplicar el formato seleccionado a la etiqueta “EtiquetaPrueba” tras pulsar en “BotonAplicar” Implementamos el manejador del evento click del botón “BotonAplicar” (haciendo doble clic sobre el control). Lo primero que haremos es determinar el formato que se aplicará por defecto en el caso de que el usuario no seleccione alguna opción. Después revisamos lo que el usuario seleccionó y finalmente aplicamos el formato a la etiqueta “EtiquetaPrueba”. 2.32 Programación .NET (II). Diseño de formularios Windows El método queda implementado como se muestra a continuación. Private Sub BotonAplicar_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles BotonAplicar.Click 'Declaramos las variables y asignamos valores por defecto Dim fuente As String = "Times New Roman" Dim tamaño As Integer = 11 Dim tipo As System.Drawing.FontStyle = FontStyle.Regular 'Revisamos lo que seleccionó el usuario 'tipo de fuente If TipoFuente.SelectedItem <> Nothing Then fuente = TipoFuente.SelectedItem.ToString End If 'tamaño If TamañoTexto.Text <> "" Then tamaño = TamañoTexto.Text End If 'estilo cursiva If Cursiva.Checked Then tipo = FontStyle.Italic End If 'añade estilo negrita If Negrita.Checked Then tipo = tipo + FontStyle.Bold End If 'Aplicamos el formato elegido a la etiqueta EtiquetaPrueba EtiquetaPrueba.Font = New Font(fuente, tamaño, tipo) EtiquetaPrueba.ForeColor = Color.BackColor End Sub Programación .NET (II). Diseño de formularios Windows 2.33 Nuestro ejemplo ya está completo. Si iniciamos el proyecto comprobaremos que es plenamente funcional, pues la aplicación responderá a las acciones del usuario ejecutando los manejadores que hemos programado. Ya sabemos lo básico para crear aplicaciones Windows Forms, en el próximo tema profundizaremos en las posibilidades de los formularios para aplicaciones más avanzadas. 2.34 Programación .NET (II). Diseño de formularios Windows