viernes, 31 de agosto de 2012

Manejando Eventos en el Formulario


En esta parte, primero entenderemos como ocurren las cosas sobre un formulario, es decir, los diferentes eventos y procedimientos que se desencadenan, algunos automáticamente y otros por interacción del usuario.
También aprenderemos cómo programar en los eventos de teclado, eventos del mouse y eventos de cierre del formulario.

1. Ciclo de Vida del Formulario

Cuando se ejecuta una aplicación conteniendo un formulario ocurren muchas cosas que como programadores debemos conocer para poder ejecutar las acciones correspondientes.

A continuación se detalla en orden de ocurrencia los procedimientos y eventos que se disparan cuando se trabaja con una aplicación Windows conteniendo dos formularios en Visual Basic .NET:

1. Primero se ejecuta el procedimiento New del formulario de inicio, también conocido como el "constructor". En el podemos inicializar componentes, como conexiones de acceso a datos, archivos, etc. En versiones anteriores de Visual Basic se llamaba evento "Initialize".

2. En segundo lugar, después de haberse inicializado el formulario, ocurre el evento Resize en el formulario de inicio, ya que este tiene un tamaño definido en la propiedad "Size".

3. Cuando se cargan los objetos a memoria ocurre el evento Load del formulario de inicio. En este podemos configurar propiedades de los controles o componentes de la aplicación, excepto trabajar con rutinas de enfoque de controles, por ejemplo: el método Focus().

4. Cuando el formulario aparece en pantalla se dispara el evento Activated del formulario de inicio. Este evento puede usarse para enfocar ciertos controles usando el método Focus().

5. Una vez enfocado el formulario empieza el proceso de pintado de la ventana desencadenándose el evento Paint. Este evento puede usarse para trabajar con métodos gráficos (System.Drawing).

6. Despúes de desencadenarse todos los eventos anteriores (sin interacción del usuario) recién el formulario se muestra en forma total y el usuario puede interactuar con éste pudiendo ocurrir eventos del teclado, de mouse, etc.

7. Cuando desde el formulario de inicio mostramos otra ventana (sea no modal, modal o dialogo) a éste le ocurre el evento Deactivate, es decir el foco pasa a otra ventana.

8. Si se regresa nuevamente al formulario de inicio, ocurrirán los eventos Activated y Paint en forma secuencial.

9. Si tratamos de cerrar el formulario, se desencadenará el evento FormClosing en donde tenemos opción a cancelar la salida, como veremos más adelante.

10. Si no se cancela la salida ocurre el evento FormClosed y es aquí cuando se descargan los controles de la memoria.

11. El penúltimo procedimiento en ocurrir es el Disposed, conocido como el "destructor" ya que en el se libera el formulario y los recursos creados por éste.

12. Finalmente, el último evento en ocurrir es el Deactivate, ya que el formulario de inicio ya no existe al descargarse de la memoria.

Sugerencia: Podemos pensar que el procedimiento New y el evento Load son indiferentes para inicializar variables o realizar acciones de inicio, lo aconsejable es hacerlo en el evento Load. De igual forma ocurre con el evento Closed y el procedimiento Disposed, lo aconsejable es programar las acciones de cierre en el evento Closed.

Ejemplo04:

Esta demostración tiene por objetivo reconocer los eventos que le suceden a un formulario durante su "ciclo de vida", desde que se crea hasta que se destruye y se desactiva. Para ello utilizaré el visual studio 2010

El ejemplo presenta un simple formulario con un botón de comando que muestra otro formulario. Se han programado los principales eventos del formulario de incicio y la salida se muestra en la "ventana de salida" de Visual Studio usando el método WriteLine() del objeto Debug. Para lo cual debemos realizar los siguiente pasos:


     1.    Crear una aplicación Windows en Visual Basic . NET llamada Ejemplo04



     2.    Una vez mostrado el formulario, realizamos un Click en el botón “Guardar” y  almacenamos el proyecto en la ubicación indicada



    3.    En la ventana del explorador de soluciones seleccionar el archivo Form1 y en la ventana de propiedades cambiar la propiedad Filename a FRMEventos


 
    4.    En el diseñador de formularios Windows, arrastrar un control Button del ToolBox hacia el formulario y configurar las propiedades, tal como se muestra a continuación:
 
Objeto                  Propiedad                 Valor

FRMEventos        Text                           Prueba de Eventos
FRMEventos        StartPosition             CenterScreen
FRMEventos        FormBorderStyle      FixedSingle
FRMEventos        Size                          Width=290, Height=290
FRMEventos        MaximizeBox            False
FRMEventos        MinimizeBox             False

Button1                 Name                        btnMostrarForm
Button1                 Text                          Mostrar Otro Formulario
Button1                 Size                           Width=150, Height=23








     5.    Seleccionar el formulario y presionar la tecla F7 o Click Derecho y seleccionar “View Code”.


 
      6.  Escribir los siguientes procedimientos manejadores de eventos asociados al Byval formulario, eligiendo para ello de la lista de objetos “(FRMEventos Events)” y de la lista de eventos el evento respectivo, luego cambiar el nombre del procedimiento y programar como sigue:






     7.    Escribir el procedimiento manejador de evento asociado al botón, eligiendo para ello de la lista de objetos “btnMostrarForm” y de la lista de eventos el evento “Click”, luego cambiar el nombre del procedimiento y programar como sigue:









 
Todo el código queda de la siguiente manera:


 
      8.    Grabar y luego ejecutar la aplicación con la tecla F5










2. Trabajando con Eventos de Teclado

Los eventos de teclado ocurren cada vez que se presiona una tecla sobre el formulario. Éstos son tres: KeyDown, KeyPress y KeyUp y dependiendo el tipo de tecla que se presione ocurren dos de ellos o los tres.

Nuestro teclado tiene dos tipos de teclas: simples y extendidas. Por ejemplo, si pulsamos una tecla simple como un digito o caracter alfabético, ocurren en orden secuencial los eventos KeyDown, KeyPress y KeyUp. En cambio, si pulsamos una tecla extendida como una tecla de función o de dirección, sólo ocurren los eventos KeyDown y KeyUp.



  • Manejando Teclas Simples 
Para manejar las teclas simples debemos escribir código en el evento KeyPress del formulario, el cual tiene un parámetro de tipo KeyPressEventArgs que contiene información sobre el evento de tecla simple.

El evento KeyPress ocurre al pulsar un carácter ASCII, los cuales pueden ser cualquiera de los 256 caracteres de la tabla ASCII, tales como caracteres no imprimibles (secuencias de escape), caracteres simbólicos (operadores), caracteres alfabéticos (A-Z, a-z), dígitos (0 al 9), o caracteres especiales.

A continuación las propiedades de la clase KeyPressEventArgs:

-Handled                |      Obitene o establece un valor que indica sí se controló el evento KeyPress.

-KeyChar               |      Obtiene el caractér correspondiente a la tecla presionada.

El evento KeyPress envía a la aplicación el caractér ASCII presionado mediante la propiedad KeyChar además podemos obtener su código mediante el método Asc() que devuelve el código ASCII asociado a dicho caractér.


2. Manejando Teclas Extendidas

Para manejar las teclas extendidas debemos escribir código en el evento KeyDown o KeyUp del formulario, el cual tiene parámetro de tipo KeyEventArgs que contiene información sobre el evento de tecla extendida.

La diferencia entre ambos eventos es que el KeyDown ocurre al pulsar una tecla extendida y el evento KeyUp ocurre al soltar dicha tecla.

Los eventos KeyDown y KeyUp ocurren al pulsar y soltar un caractér extendido respectivamente, los cuales pueden ser cualquiera de los 256 caracteres de la tabla ASCII y también las teclas de funciones (F1 a F12), teclas direccionales (inicio, fin, izquierda, derecha, arriba, abajo, página arriba y página abajo), etc.


A continución las propiedades de la clase KeyEventArgs:

-Alt                |   Obtiene un valor que indica si se presionó la tecla ALT.

-Control         |   Obtiene un valor que indica si se presionó la tecla CTRL.

-Handled        |   Obtiene o establece un valor que indica si se controló el evento.

-KeyCode      |   Obtiene el código de teclado para un evento KeyDown o KeyUp.

-KeyData       |   Obtiene los datos de tecla para un evento KeyDown o KeyUp.

-KeyValue      |    Obtiene el valor de teclado para un evento KeyDown o KeyUp.

-Modifiers      |    Indica qué combinación de teclas modificadoras (CTRL, MAYÜS y ALT) se presionaron.

-Shift              |    Obtiene un valor que indica si se presionó la tecla MAYÜS.

Los eventos KeyDown y KeyUp envían a la aplicación toda la información sobre el caractér extendido presionado, el cual puede ser una simple tecla o una combinación de teclas, por ejemplo: Control, Shift, Alt más un caracter.

Ejemplo02:

En el presente ejemplo se busca reconocer los eventos de teclado de un formulario, en especial el KeyPress y el KeyUp.

El ejemplo presenta un simple formulario en el cual al pulsar cualquier tecla se muestra un mensaje con la tecla pulsada, el evento y el código de la tecla. Utilizaré el Visual Studio 2010.



     1.    Crear una aplicación Windows en Visual Basic .Net llamada Ejemplo02


     2.    Una vez mostrado el formulario, realizamos un Click en el botón “Guardar” y  almacenamos el proyecto en la ubicación indicada

 


3.    En la ventana del explorador de soluciones seleccionar el archivo Form1 y en la ventana de propiedades cambiar la propiedad “FileName” a FRMTeclado


     4.    En el diseñador de formularios Windows, seleccionar el formulario y configurar sus propiedades, tal como se muestra a continuación.

Objeto                         Propiedad                   Valor

FRMTeclado              Text                            Pulsa cualquier tecla

FRMTeclado              StartPosition               CenterScreen

FRMTeclado              FormBorderStyle       FixedSingle

FRMTeclado              MaximizeBox             False

FRMTeclado              MinimizeBox              False    


  5.    Seleccionar el formulario y presionar la tecla F7 o Click Derecho y seleccionar “View Code”.
 6.    Escribir el procedimiento manejador de evento MostrarTeclaExtendida asociado al formulario, eligiendo para ello de la lista de objetos “(FRMTeclado Events)”
 

y de la lista de procedimientos “KeyUp”

 , luego cambiar el nombre del procedimiento a MostrarTeclaExtendida  


 y programar como sigue:


   7.    Escribir el procedimiento manejador de evento MostrarTeclaSimple asociado al formulario, eligiendo para ello de la lista de objetos “(FRMTeclado Events)” 



 y de la lista de eventos el evento “keyPress”

 , luego cambiar el nombre del procedimiento y programar como sigue:

    
8.    Grabar y luego ejecutar la aplicación con la tecla F5, pulsar una tecla para comprobar el ejemplo



3. Trabajando con Eventos del Mouse

Los eventos del mouse ocurren cada vez que se usa el mouse sobre el formulario. Éstos  son 3: MouseDown, MouseUp y MouseMove.

El evento MouseDown ocurre al pulsar cualquier botón del mouse  y el evento MouseUp ocurre al soltar dicho botón presionado. En cambio, el evento MouseMove ocurre al pasar el mouse sobre el  formulario sin necesidad de presionar ningún boton.

Los tres eventos del mouse tienen un parámetro de tipo MouseEventArgs que contiene información sobre el evento del mouse, tal como el botón presionado, la coordenada donde se encuentra el puntero, etc.

A continuación las propiedades de la clase MouseEventArgs:

Buttons     :    Obtiene el botón del mouse que se presionó
Clicks       :    Obtiene el número de veces que el botón del mouse se presionó y se soltó   
Delta        :    Obtiene un recuento con signo que indica el número de pasos de trinquete que ha girado la rueda del mouse. Un paso de trinquete es una muesca de la rueda del mouse.
X              :     Obtiene la coordenada x del mouse
Y              :     Obtiene la coordenada y del mouse

Ejemplo03:

En el presente ejemplo se usan los eventos del mouse que ocurren sobre el formulario, en especial  el evento MouseMove.

El ejemplo presenta un simple formulario en el cual al pasar el mouse por éste se va mostrando las coordenadas en la barra de titulo y se va dibujando un circulo de radio 20. Utilizaré el Visual Studio 2010.

     1.    Crear una aplicación Windows en Visual Basic .NET llamada Ejemplo03


2.    Una vez mostrado el formulario, realizar un Click en el botón “Guardar” y  almacenar el proyecto en una ubicación indicada.



 3.    En la ventana del explorador de soluciones seleccionar el archivo Form1 y en la ventana de propiedades cambiar la propiedad “FileName” a FRMPintado





4.    En el diseñador de formularios Windows, seleccionar el formulario y configurar sus propiedades, tal como se muestra a continuación.

Objeto                 Propiedad         Valor

FRMPintado       Text                   Mueve el puntero en el formulario
FRMPintado       Position             CenterScreen
FRMPintado       Size                   500;300


 5.    Seleccionar el formulario y presionar la tecla F7 o Click Derecho y seleccionar “View Code”.


 6.    Escribir el procedimiento manejador de evento DibujarCirculo  asociado al formulario, eligiendo para ello de la lista de objetos “(FRMPintado Events)”


y de la lista de eventos el evento “MouseMove”


, luego cambiar el nombre del procedimiento a DibujarCirculo


y programar como se indica:

     7.    Grabar y luego ejecutar la aplicación con la tecla F5


 8.    Mover el puntero del mouse por el formulario sin presionar ningún botón y realizar un dibujo




Espero haber ayudado en algo. Adjunto los proyectos en los siguientes enlaces:

Ejemplo05 - Descargar
Ejemplo06 - Descargar
Ejemplo07 - Descargar



Hasta la próxima oportunidad!



No hay comentarios:

Publicar un comentario en la entrada