CREAR EVENTOS EN CSHARP | C# .NET
Eventos
En
esta lección veremos cómo trabajar con los eventos producidos en una aplicación
de Windows, con idea de que nos familiaricemos con ellos, y veamos la relación
que tienen con los delegados; en la siguiente lección trataremos los delegados
con más profundidad, para seguir con la forma de declararlos en nuestras
clases.
Interceptar los eventos de los controles de un formulario
Debido
a que aún no hemos visto el módulo dedicado a las aplicaciones de Windows, en
las que se utilizan los "clásicos" formularios, no vamos a entrar en
detalles sobre cómo crear un formulario ni como añadir controles, etc., todo
eso lo veremos en el siguiente módulo. Para simplificar las cosas, veremos
simplemente cómo definir un evento y asociarlo a un control e incluso al propio
formulario, esto lo haremos de dos formas: usando el diseñador de Windows
Forms, ya que esta será la manera más habitual de hacerlo, y la otra
escribiendo el código directamente, ya que así empezaremos a adentrarnos en
este mundo de los eventos y delegados, con idea de que lo que expliquemos a
continuación sea más fácil de comprender.
Asociar un evento con un control
Cuando trabajamos con el diseñador de formularios, tenemos dos formas de asociar un evento con el código.
La primera es haciendo doble pulsación sobre el control en cuestión, de esta forma se creará un método que asociará el evento que esté predeterminado para ese control.
Por ejemplo, si hacemos doble-click en un botón, el evento predeterminado es el evento Click. Si esa misma acción la realizamos en una caja de textos, el evento predeterminado es TextChanged.
Si
queremos asociar otros eventos con esos controles, tenemos que recurrir a la
ventana de propiedades del diseñador de Windows Forms, que tal como podemos
comprobar en la figura 2.12, nos muestra, entre otras cosas, un rayo el cual
nos servirá para poder indicar los diferentes eventos que queramos interceptar
en el control que actualmente tengamos seleccionado en el formulario.
En la figura 2.13 podemos ver algunos de los eventos que tenemos disponibles para un control TextBox.
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
Pero
además de eso, el diseñador de formularios de Visual Studio .NET también ha
añadido una línea de código que es la que realmente hace que se asocie un
método con un evento, en el caso del evento TextChanged del control textBox1 que
tenemos en el formulario, el código sería el siguiente:
this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged);
Como
vemos en los dos trozos de código, hay una relación entre el método que
utilizaremos cuando se produzca el evento, el cual utiliza dos parámetros, que
es la forma habitual de hacerlo en .NET. El primer parámetro es de tipo object
y representa al control que ha producido el evento, el segundo parámetro es de
una clase derivada de EventHandler que en algunos casos nos puede proporcionar
información extra sobre el evento que se ha producido.
Para
asociar el evento con ese método, en C# se utiliza el operador += seguido de la
creación de un objeto al que se le pasa como argumento el nombre del
procedimiento a usar para interceptar el evento.
La
definición de la "clase" EventHandler que podemos encontrar en la
ayuda de Visual C# .NET, es la siguiente:
Como
podemos apreciar realmente no es una clase normal, sino que es un
"delegado". Y como también podemos ver, en ningún sitio se indica que
reciba un solo parámetro. Aunque de esto nos ocuparemos más adelante, por ahora
solo debemos saber que en C# los eventos siempre están ligados a los delegados.
Si
seguimos buscando en la ayuda de Visual C# .NET, nos encontramos con esta
definición del evento TextChanged:
public event EventHandler TextChanged;
Es
decir, el evento TextChanged es del tipo del delegado EventHandler.
Para
mantener un poco el suspense, dejemos aquí las explicaciones. Por ahora,
simplemente debemos saber que para asociar un evento con un método, debemos
usar el operador += para asignar el "manejador" de eventos al evento
en cuestión, y lo que asignamos es un nuevo objeto basado en un tipo declarado
como delegado al que le pasamos el nombre del procedimiento que se usará cuando
se produzca el evento.
Asociar varios eventos a un mismo procedimiento
Algunas
veces nos encontraremos en la situación de que estamos utilizando el mismo
código para interceptar el mismo tipo de evento en controles diferentes, en
esos casos nos puede interesar utilizar un solo método, en el que haremos el
trabajo.
Asociarlos usando el diseñador de Windows Forms
La
forma más fácil de asociar un mismo método con varios controles es hacerlo
usando la ventana de propiedades, ver figura 2.13, en esa ventana de
propiedades, además de crear nuevos métodos donde interceptar los eventos,
podemos asociar un evento con un método ya existente.
Por ejemplo, si tenemos varios controles del tipo TextBox en los que nos interesa utilizar un solo método para seleccionar todo el texto cuando el control recibe el foco, podríamos escribir este código que inicialmente estaría asociado con el evento Enter del control textBox1:
Por ejemplo, si tenemos varios controles del tipo TextBox en los que nos interesa utilizar un solo método para seleccionar todo el texto cuando el control recibe el foco, podríamos escribir este código que inicialmente estaría asociado con el evento Enter del control textBox1:
private void textBox1_Enter(object sender, EventArgs e)
{
((TextBox)sender).SelectAll();
}
Lo
que tenemos que hacer es lo siguiente:
-Seleccionamos el control al que queremos asociar ese mismo evento.
-En la ventana de propiedades, (con la opción de eventos seleccionada), buscamos el evento Enter, y en lugar de hacer doble pulsación, (porque si lo hacemos crearía un nuevo procedimiento), lo que tenemos que hacer es presionar el combo que es lo que se usa para indicar el método usado, de la lista desplegable que se muestra, (ver figura 2.14), seleccionamos el método que nos interese. En nuestro ejemplo, seleccionaríamos textBox1_Enter.
-Seleccionamos el control al que queremos asociar ese mismo evento.
-En la ventana de propiedades, (con la opción de eventos seleccionada), buscamos el evento Enter, y en lugar de hacer doble pulsación, (porque si lo hacemos crearía un nuevo procedimiento), lo que tenemos que hacer es presionar el combo que es lo que se usa para indicar el método usado, de la lista desplegable que se muestra, (ver figura 2.14), seleccionamos el método que nos interese. En nuestro ejemplo, seleccionaríamos textBox1_Enter.
Como
podemos apreciar en la figura 2.14, en la lista desplegable se muestran tres
métodos, esto es así porque todos ellos tienen los parámetros adecuados al tipo
de evento que hemos seleccionado.
Asociarlos usando código
Si
en lugar de asociar un mismo método usando el diseñador de Windows Forms,
queremos hacerlo por código, lo podemos añadir en el constructor del formulario
después de la llamada al método InitializeComponent().
El IDE de Visual C# .NET nos ayuda a la hora de crear el manejador de eventos, tal como podemos ver en la figura 2.15:
El IDE de Visual C# .NET nos ayuda a la hora de crear el manejador de eventos, tal como podemos ver en la figura 2.15:
Figura 2.15. Ayuda del IDE de C# para crear manualmente manejadores de eventos
Si
presionamos la tecla TAB se añadirá automáticamente el código necesario para
"ligar" ese evento con el método que el IDE de C# "cree"
que debe ser, en este caso, sería textBox2_Enter, pero una vez que el IDE ha
añadido el código podemos cambiarlo para que apunte al que realmente nos
interesa.
En
caso de que ese evento ya esté asociado con otro método, el IDE nos avisará de
ese hecho.
No hay comentarios:
Publicar un comentario