ArcanuS Web Blog 3.0

La casa de un paranoico

ArcanuS Web Blog 3.0 header image 1

[TUTO] Eventos en C#

junio 9th, 2008 · 10 Comments

Programacion

El presente material forma parte de la colección de artículos de la sección “Programación y Desarrollo de software” de www.arcanus.com.ar. Fue pensado y escrito por ArcanuS solo con fines educativos. El mismo puede ser copiado y/o redistribuido sin restricción alguna mientras no se altere el contenido y se mantenga el nombre del autor.

Este texto viene acompañado de los archivos de código fuente de los ejemplos utilizados. Si usted posee solo este texto pero no los archivos, por favor diríjase a la web www.arcanus.com.ar y vuelva a bajar el tutorial completo.

Edit: Bajar tuto completo clic aqui

Este tutorial es de nivel básico. Trataré de explicar de forma amena qué es un evento, para que sirve, en que me beneficia y como se trabaja con el.

Requisitos Previos:

  • Saber lo básico de C# en general (que es una variable, función, método, clase, etc.)
  • Saber manejarse con la interface de Visual C# Express 2008 (o a su defecto con Visual Studio 2008)
  • Tener muchas ganas de aprender y divertirte

Para este curso utilizaré la versión EXPRESS de Visual C# 2008, la cual, si no la tienen, pueden bajar desde http://www.microsoft.com/express/download/. En el caso de que ya posean Visual Studio 2008 no hace falta que bajen nada mas.

Visual C# Express Edition 2008, es una herramienta gratuita para los que recién empezamos a programar y aún no nos decidimos a comprar Visual Studio. Esta herramienta cuenta con todas las capacidades básicas de C# 2008 Full, pero no posee ninguna característica avanzada, pero para este tipo de ejemplos basta y sobra, es mas, para la mayoría de los ejemplos que van a encontrar en la web basta y sobra.

Una vez que la bajan lo único que tienen que hacer es registrarla de forma gratuita así les dan el código de registro.

Bueno, pues si está todo ok hasta aquí, adentrémonos en el curso. Cualquier cosita feedback a paranoid@arcanus.com.ar.

Muchas Gracias a todos!

ArcanuS

Empezando:

Bienvenido a este tutorial sobre eventos en c#. Vamos a aprender a trabajar con eventos de forma fácil y divertida, creando una aplicación de consola muy simple y básica que capturará un evento determinado. Pero ante nada… ¿Qué es un evento?:

Una buena definición. Durante el tiempo de vida de un programa, se disparan muchísimos eventos sin que nosotros nos demos cuenta: Resize del formulario, botones presionados, teclas pulsadas, etc. Esos eventos pueden ser capturados y manejados por el programa para hacer que este realice una acción en particular.

Ejemplo de esto es cuando hacemos clic en un botón de un formulario. Se dispara el evento Click y por lo general se ejecuta el método Button*_click() donde * es el número por defecto de botón clickeado.

Existen 2 tipos de eventos básicos: Los estándar y Los creados por el usuario.

Los eventos estándar son los propios del lenguaje y de los componentes que ya están hechos, como los controles. Estos se disparan automáticamente y algunos hasta son manejados de forma automática.

Los eventos creados por el usuario son eventos que se crean y sitúan en el lugar del programa que el usuario elija. Estos hay que dispararlos manualmente y capturarlos manualmente también desde otra parte del programa. Es en estos últimos tipos de eventos en los que nos vamos a centrar en este curso.

La principal tarea de un evento es servir de herramienta de control de procesos. Si se requiere tener un control riguroso sobre un programa, será esencial el uso de eventos que nos permita saber lo que está haciendo el usuario en tiempo de ejecución o el resultado de las sub rutinas del programa.

Si hemos entendido todo hasta acá vamos a la práctica.

Practicando:

Abrimos Visual C# y creamos un nuevo proyecto de consola, quedaremos ante esta pantalla:

Vamos a crear una aplicación de tipo “Hola Mundo” que utilizará un evento que deberemos capturar y manejar desde el programa principal. Para ello primeramente crearemos una clase llamada Salida que será la encargada de escribir la famosa frase “Hola Mundo” en la consola.

Para esto agregamos una nueva clase, le ponemos de nombre Salida y le damos Ok.

Ahora vamos a añadirle el siguiente código:

El código está todo comentado, pero ustedes pueden obviar los comentarios y transcribir solamente la parte de código. Recuerden que en el .zip encontrarán el código de este ejemplo y otro adicional para que vean como trabajar eventos en aplicaciones gráficas.

Bien, pues con esos comentarios no hay mucho mas para decir.

La clase emplea un constructor para que la inicialicemos pasándole el texto que queremos escribir en la consola, en este caso será Hola Mundo.

Fíjense arriba del todo cuando declaramos el evento “ok”. Lo declaramos como público y de tipo EventHandler. Esto es un tipo de evento de la forma EventHandler(object sender, EventArgs e), que es el mas común y que usaremos el 90% de las veces en nuestros programas.

Al final del código tenemos la función Escribir() que es pública y void (no devuelve ningún valor). Este método primero escribe en consola el contenido de la variable txt y luego lanza el evento “ok” para confirmar la escritura. El evento es lanzado con 1 solo parámetro: sender, ya que “e” (argumentos adicionales) pasa como null. Este famoso sender es de tipo object, asi que puede contener cualquier cosa, que luego habrá que castear a un formato determinado para poder trabajar con el.

Hasta aquí con el código de la clase, ahora volvamos al programa principal y añadámosle el siguiente código:

Lo primero aquí será crear un objeto en base a la clase Salida e inicializar su constructor con el texto “Hola Mundo”.

En este punto presten mucha atención. Cuando el método escribir escriba en pantalla la frase “Hola Mundo” lanzará el evento “ok” y se olvidará de el. Luego si se captura o no ese evento ya es problema del programa principal y no del método en si. Como dije al principio, durante el transcurso del programa, se disparan cientos de eventos, los cuales no nos enteramos porque no los capturamos, pero los eventos se disparan. Acá sucede lo mismo, una vez disparado el evento, si no hay alguna sentencia a lo largo del programa que se encargue de capturarlo, simplemente morirá.

Para capturar un evento, primero hay que subscribirse a el desde otra parte del programa. Recuerden siempre que el evento es propio del objeto creado por tanto para acceder a el primero hay que invocar al objeto.

Esto se logra con la sentencia; NombreDeObjeto.NombreDeEvento += new EventHandler(FuncionDestino);
Fijense que estamos creando un nuevo EventHandler e inicializando su constructor con el nombre de la función que se encargará de manejar el evento capturado. Hay que tener en cuenta que la función de destino tiene que ser del mismo tipo que el EventHandler. ¿Recuerdan que el EventHandler tenía 2 parametros?, estos eran sender de tipo object, y e de tipo EventArgs. Bueno, la función de destino tiene que poder recibir estos dos parámetros y por supuesto ser de tipo void ya que no puede devolver ningún valor al EventHandler.

En este ejemplo, la función de destino será Captura y se encargará de, ni bien capture el evento escribir en pantalla la frase “Evento Capturado”, la cual fue pasada por parámetro cuando se lanzó el evento y está encapsulada dentro de la variable sender.

Primero habrá que castear sender al tipo string y asignarlo a una nueva variable llamada txt y luego la escribimos en la consola.

Si todo salió bien, una vez que compilen deberían ver la siguiente imagen:

En resumen, primero se llamó al método escribir de la clase salida, el cual hizo lo suyo y disparó el evento “ok”, el cual fue capturado desde el programa principal y manejado por el método Captura, el cual escribió en la consola “Evento Capturado”. Felicitaciones, ya saben usar eventos en C#!!!.

Palabras Finales:


Aprender a usar eventos en nuestros programas, puede ser algo tedioso, pero muy útil a la hora de exigirle al mismo un mayor control sobre su funcionalidad.

Hemos llegado al final de este tutorial, espero que halla sido útil y entendible. Quiero dedicar este texto a todos mis compañeros de la materia Programación General 1 que estoy cursando en la universidad, y a la profesora de la misma, Sra Graciela D. quien me enseñó muchísimo sobre C y C++ y que me aguanta 2 veces por semana y me contesta todas mis dudas (que por lo general son muchísimas) sin ningún problema, incluso cuando dicha duda no tiene nada que ver con el tema que estamos viendo.

Para bajarte el .zip con este manual en formato pdf mas los codigos fuentes sigue el siguiente enlace: http://arcanus.com.ar/Downloads/Tutoriales/Programacion/Csharp/Eventos.rar

Y si te ha gustado demasiado y quiere cooperar, puedes hacerlo donando unas monedas para el sitio en el boton de paypal en la parte superior izquierda de la web.

Gracias a todos y nos vemos la próxima.

Tags: GNU/Linux · Programacion y Desarrollo

votar

10 responses so far ↓

  • 1 Jose Luis // jul 24, 2008 at 7:47

    Buen tuto! Me ha servido de ayuda en una clase que estoy haciendo.

  • 2 wer // ene 6, 2009 at 23:33

    Saludos, estimado podrias poner un ejemplo de como seria con webform.

  • 3 idx001 // abr 17, 2009 at 12:14

    Muy bueno, Muchas gracias!!!

  • 4 Denise // may 17, 2010 at 14:37

    Gracias por el tuto, muy entendible!!!

  • 5 Rafael Andrade // may 28, 2010 at 22:21

    Maestro!!

  • 6 Juan Pablo // sep 15, 2010 at 17:53

    exelente , mejor imposible.. muy entendible , saludos!

  • 7 JD.Pavon // dic 30, 2010 at 22:44

    Gracias por el tutorial, muy bueno.

  • 8 Francisco // dic 31, 2010 at 15:04

    Excelente, ahora solo me gustaria saber si es posible dejar el evento sin parametros, o bien personalizarlos, por ejemplo.
    public event EventHandler changevalue(decimal lastvalue, decimal value)…
    Gracias por el aporte..:D

  • 9 Daniel // jul 23, 2011 at 22:29

    Olvidaste mencionar en qué versión de Visual Studio lo hiciste (creo)… No se llegó a ejecutar en VS 2005. Gracias de todos modos.

  • 10 ArcanuS // jul 27, 2011 at 15:28

    Hola Daniel. Como son conceptos bastantes genericos, van para 2003, 2005, 2008 y 2010!
    Saludos.-

Leave a Comment