You are on page 1of 7

Eventos (Guía de programación de C#

)
Los eventos proporcionan un medio de que una clase u objeto informe a otras clases u objetos cuando sucede algo relevante. La clase que envía (o produce) el evento recibe el nombre de editor y las clases que reciben (o controlan) el evento se denominan suscriptores. En una aplicación de formularios Windows Forms o Web en C# típica, se suscribe a eventos generados por controles como botones y cuadros de lista. Puede utilizar el entorno de desarrollo integrado (IDE) Visual C# para examinar los eventos que publica un control y seleccionar los que desea controlar. El IDE agrega automáticamente un método de controlador de eventos vacío y el código para suscribirse al evento. Para obtener más información, vea Cómo: Suscribir y cancelar la suscripción a eventos (Guía de programación de C#).

Información general de eventos
Los eventos tienen las propiedades siguientes:
y y y y y

y y

El editor determina cuándo se produce un evento; los suscriptores determinan qué operación se realiza en respuesta al evento. Un evento puede tener varios suscriptores. Un suscriptor puede controlar varios eventos de varios editores. No se llama nunca a los eventos que no tienen suscriptores. Los eventos se utilizan normalmente para señalar acciones del usuario como hacer clic en un botón o seleccionar un menú en interfaces gráficas de usuario. Si un evento tiene varios suscriptores, se invocan los controladores de eventos sincrónicamente cuando se produce el evento. Para invocar de forma asincrónica los eventos, vea Llamar a métodos sincrónicos de forma asincrónica. Los eventos se pueden utilizar para sincronizar subprocesos. En la biblioteca de clases .NET Framework, los eventos se basan en el delegado EventHandler y en la clase base EventArgs. TIPOS DE EVENTOS

Una acción, reconocida por un objeto, para la cual puede escribir código de respuesta. Los eventos pueden estar generados por una acción del usuario, como hacer clic con el mouse o presionar una tecla, por código de programa o por el sistema, como ocurre con los cronómetros. Form (Objeto), Forms (Colección) Un objeto Form es una ventana o un cuadro de diálogo que forma parte de la interfaz de usuario de una aplicación.

Por ejemplo. puede contener otros formularios llamados formularios secundarios MDI. Nota Si establece BorderStyle a 0 se eliminará el borde. un formulario secundario MDI se crea eligiendo Nuevo formulario en el menú Archivo y. Set y Static. podría escribir código en el procedimiento de evento Click de un formulario que permitiera al usuario cambiar el color de un formulario haciendo clic en él. Puede pasar Forms(índice) a una función cuyo argumento se especifica como una clase Forms. puede usar el método Move para cambiar la ubicación y el tamaño de un formulario. que especifica el número de elementos de la colección. Puede crear múltiples instancias de formularios en código si utiliza la palabra clave New en instrucciones Dim. Comentarios Puede usar la colección Forms para iterar a través de todos los formularios cargados en una aplicación. Los formularios también pueden responder a eventos iniciados por un usuario o desencadenados por el sistema. estableciendo la propiedad MDIChild a True. Puede declarar variables como de tipo Form antes de . Por ejemplo. Identifica una variable global intrínseca denominada Forms. La colección Forms tiene una única propiedad. elimine texto de la propiedad Caption y establezca a False las propiedades ControlBox. La colección incluye el formulario MDI.Count . Un tipo especial de formulario. puede emplear métodos para manipular formularios mediante código. el formulario secundario MDI y formularios no MDI de la aplicación.Forms es una colección cuyos elementos representan cada formulario cargado en una aplicación. el formulario MDI. tamaño y color) y aspectos de su comportamiento (como si puede ajustar o no su tamaño).1. botón Maximizar y botón Minimizar. Sintaxis Form Forms(índice) El marcador de posición índice representa un entero entre 0 y Forms. En el código puede usar los métodos Hide y Show para hacer que los formularios sean invisibles o visibles en tiempo de ejecución. Si desea que el formulario tenga borde sin barra de título. Al diseñar formularios. establezca la propiedad BorderStyle para definir el borde del formulario y establezca la propiedad Caption para colocar texto en la barra de título. Los formularios tienen propiedades que determinan aspectos de su apariencia (como posición. Form es un tipo de datos Object. Count. cuadro del menú Control. MaxButton y MinButton. a continuación. Un formulario MDI se crea con el comando Agregar formulario MDI del menú Proyecto. Además de propiedades y eventos.

para ocultar todos los controles de un Form puede usar código similar al siguiente: For Each Control in Form1. con un control Label. Del mismo modo. Puede tener acceso a la colección de controles de un Form mediante la colección Controls. con el TextArea y Button como hojas y la instancia de Applet como raiz. el botón que ha sido pulsado) y se desplaza hacia arriba en el árbol de Componentes. que aparece en la figura siguiente. Todos los métodos handleEvent() deben ser de la forma: public boolean handleEvent( Event evt ) . hasta que alcanza al Contenedor de la raíz del árbol. puede pasar un argumento a un procedimiento como de tipo Form. Por ejemplo. Cuando un usuario interactúa con el applet. Durante este camino. La figura siguiente presenta los elementos que conforman este applet en forma de árbol. cada Componente tiene oportunidad de ignorar el evento o reaccionar ante él en una (o más) de las forma siguientes: y y y Modificar los datos miembros de la instancia de Event Entrar en acción y realizar cálculos basados en la información contenida en el evento Indicar al sistema Java que el evento no debería propagarse más arriba en el árbol El sistema Java pasa información del evento a un Componente a través del método handleEvent() del Componente. Los formularios pueden actuar como origen en una conversación DDE. embebidas dentro de una instancia de la clase Panel.Controls Control. el sistema Java crea una instancia de la clase Event y rellena sus datos miembro con la información necesaria para describir la acción. componente a componente. Consta de dos instancias de la clase Button. EventosPro. Esta instancia está a su vez embebida dentro de otra instancia de la clase Panel.Visible = False Next Control GENERACION Y PROPAGACION DE EVENTOS Tomemos el applet. y ambas están embebidas dentro de una instancia de la clase Applet. Esta última instancia de la clase Panel está situada junto a una instancia de la clase TextArea. Es en ese momento cuando el sistema Java permite al applet controlar el evento.java. Este control comienza por el Componente que recibe inicialmente el evento (por ejemplo.establecerlas a una instancia de un tipo de formulario que se ha declarado en tiempo de diseño. PictureBox o TextBox proporcionando los datos.

appendText( "Panel " + str + " recibe mouse_down. Luego permite que el evento se propague al siguiente Componente. una instancia de la clase Panel). la localización del click.\n" ). El usuario pulsa el botón "Uno". o que no ha sido controlado en su totalidad y debe continuar su propagación hacia arriba en el árbol de Componentes. Si el Componente no controla el evento.id == Event.MOUSE_DOWN ) ta.Un controlador de eventos solamente necesita una información: una referencia a la instancia de la clase Event que contiene la información del evento que se ha producido.. el botón "Uno") y.. la hora en que se ha producido la pulsación y el Componente que ha recibido el click) y empaqueta todos esos datos en una instancia de la clase Event. El sistema Java continúa de este mismo modo hasta que el evento es controlado en su totalidad o ya no hay Componentes a los que informar..ACTION_EVENT ) ta. Indica al sistema Java si el evento ha sido o no completamente controlado por el controlador. El código del controlador de eventos usado en el ejemplo es el que muestran las siguientes líneas: public boolean handleEvent( Event evt) { if( evt. else if( evt. Un valor false indica que el evento ha sido ignorado.handleEvent( evt ). Un valor true indica que el evento ha sido controlado y que su propagación debe detenerse.appendText( "Panel " + str + " recibe action. return super. El valor devuelto por el método handleEvent() es importante. el sistema Java presentará la instancia de Event al siguiente Componente por encima en el árbol (en este caso.. Cada Componente del applet añade una línea al objeto TextArea indicando que ha recibido un evento.\n" ). El sistema run-time del lenguaje Java capturará la información sobre el evento (el número de clicks. El sistema Java comienza entonces por el Componente que ha sido pulsado (en este caso. En la figura siguiente mostramos el camino recorrido por el evento en su intento de que algún Componente lo controle. a través de una llamada al método handleEvent() del Componente. Veamos la descripción de una acción con el applet de la figura anterior.id == Event. o no lo hace completamente (indicado por un valor de retorno false). } . ofrece a éste la posibilidad de reaccionar ante el evento.

int x.int x. return true. el programador puede colocar el código en un método de ayuda.int y ) mouseDrag( Event evt. public boolean handleEvent( Event evt ) { if( evt. No hay métodos de ayuda para ciertos tipos de eventos.int x.int x.int key ) false indicará que el método de ayuda no maneja el evento.Object obj ) mouseEnter( Event evt. es importante que las implementaciones redefinidas del método handleEvent() en clases derivadas.int y ) keyDown( Event evt. un Componente solamente estará interesado en eventos de un cierto tipo (por ejemplo.int y ) mouseUp( Event evt. En estos casos. que controla los eventos de ratón exclusivamente a través de código insertado en sus métodos de ayuda.int x. aquí está la lista de los que están disponibles para los programadores: action( Event evt.int y ) mouseExit( Event evt. va dibujando una línea (rubber band) entre el último punto donde se ha producido un click de ratón y la posición actual del cursor. Por esta razón. A veces. } return( super. sin embargo..handleEvent( evt ) ).target instanceof MiBoton ) { // Hace algo. eventos del ratón). . La implementación del método handleEvent() proporcionada por la clase Component invoca a cada método de ayuda. } No seguir esta regla tan simple hará que no se invoquen adecuadamente los métodos de ayuda.Object obj ) lostFocus( Event evt.handleEvent( evt ) ).int y ) mouseDown( Event evt.int key ) keyUp( Event evt.METODOS DE CONTROL DE EVENTOS El método handleEvent() es un lugar para que el programador pueda insertar código para controlar los eventos. siempre finalicen con la sentencia: return( super.Object obj ) gotFocus( Event evt.java..int x. El applet EventosRaton.int y ) mouseMove( Event evt. en lugar de colocarlo en el método handleEvent(). El siguiente trozo de código ilustra esta regla.

bueno lo que hacemos es que en cada evento del TEXBOX que tenemos un nuestro control. ¡pero como lo invocamos!. si ustedes se meten en el código del formulario e intentan ver los eventos del TEXTBOX_ESPECIAL. Shift As Integer) Public Event Click() Public Event DbClick() NOTA: ustedes pueden añadir mas eventos. Shift As Integer. ahora viene lo mas fácil. añadimos lo siguiente: RaiseEvent Nombre_del_Evento Por ejemplo en el Evento KeyPress de Text1 (Este TextBox es el que esta adentro de nuestro control) añadimos lo siguiente: Private Sub Text1_KeyPress(KeyAscii As Integer) RaiseEvent Keypress(KeyAscii) End Sub En keyup: . Shift As Integer. Shift As Integer. X As Single. Shift As Integer) Public Event KeyUP(KeyCode As Integer. verán que no ven todos lo eventos. Y As Single) Public Event Keypress(KeyAscii As Integer) Public Event KeyDown(KeyCode As Integer. Ahora. Para eso inserten las siguientes líneas de código en la declaración de variables (DE NUESTRO CONTROL): Public Event Changed() Public Event MouseMove(Button As Integer. ahora nuestra misión es hacer que se vean los eventos que nosotros usamos en un TEXBOX. yo solamente añadí los mas usados. Y As Single) Public Event MouseUp(Button As Integer. Y As Single) Public Event MouseDown(Button As Integer. lo que acabamos de hacer es declarar los eventos. X As Single. sino unos pocos.Creación de los eventos Ya pasamos lo mas difícil que era la declaración de propiedades. X As Single.

Shift As Integer.Private Sub Text1_KeyUp(KeyCode As Integer. Bueno ya tenemos un control DECENTE.. Vieron que era mas simple.. este control es igualito al TEXTBOX normal. HAAAAA!!!! lo que sucede es que ahora es que vamos a codificar lo bueno. Y As Single) RaiseEvent MouseMove(Button. NOTA: todos los eventos que invocan con RaiseEvent deben de estar declarados previamente. X.. Shift As Integer) RaiseEvent KeyUP(KeyCode. . Y) End Sub Y así sucesivamente. Shift) End Sub En MouseMove: Private Sub Text1_MouseMove(Button As Integer. X As Single. cada vez hacemos un control mas REAL. pero ustedes se estarán preguntando que carrizo estoy haciendo.. ahora si se meten en el código del formulario y seleccionan a nuestro control. (Háganlo en todos los eventos que declare arriba) Con esto nuestro control tiene algunos de los eventos del TEXTBOX original y su misma funcionalidad. y peor por que tiene menos propiedades y eventos que el original. Shift. quitemos el control viejo e insertemos un nuevo control con las modificaciones hechas. ahora vayamos al formulario de nuestro proyecto.. y verifican los eventos notaran que aparecen los eventos que ya venían por defecto y los que nosotros añadimos.