jueves, 15 de noviembre de 2007

Handles y cTypes

Una de las primeras cosas que hice en Visual Studio fue darle lógica a un botón. Es decir, que cuando lo pulse ocurra algo.

Me llamó la atención el montón de “palabros” que pone el .NET para hacer algo así (yo que venía del ASP)

Protected Sub btBoton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btBoton.Click
End Sub

Hasta que llegué al curso del certificado y aprendí porqué cada cosa aparece en esta sentencia., maravillandome con dos cosas en especial:

1. Le puedo poner el nombre que quiera al método.
2. Le puedo asignar este método a todos los botones que quiera.

Sabiendo esto, comprendí que ya no necesitaba un método para cada botón y que me podía hacer un solo método que me gestionara la lógica de los botones de mi formulario.

Protected Sub haPulsadoUnBoton(ByVal sender As Object, ByVal e As System.EventArgs) Handles bCodigo.Click, bDescripcion.Click

Pero… y siempre hay uno, ¿cómo sé yo que botón ha sido el que ha lanzado el método?
Pues , para eso tengo un peaso tutor (José Manuel Alarcón) y me da una pequeña línea que ya estoy utilizando en proyectos reales y que abre las puertas a tener toda juntita la lógica de los controles.

cType(sender, button).ID

¿A cualo? Y esto que hace?

sencillo. El cType convierte al objeto sender (para los no angloparlantes como yo es algo así como el remitente) al tipo botón. Y entonces puedes recuperar el ID que nos devuelve un string con el nombre del botón.

Si construyo un select case y ya puedo tener un árbol de decisión que me ejecuta código de acuerdo al ID del botón que he pulsado como por ejémplo:

Protected Sub haPulsadoUnBoton(ByVal sender As Object, ByVal e As System.EventArgs) Handles bCodigo.Click, bDescripcion.Click
Select Case CType(sender, button).ID
Case "boton1"
Response.write(“Has pulsado el boton1”)

Case "boton2"
Response.write(“Has pulsado el boton1”)
End Select
End Sub

No te olvides de incluir en el formulario los dos botones: boton1 y boton2.

P.D. Echarle una ojeada a lo que nos muestra el IntelliSense para los métodos de los controles. Te permite hasta capturar eventos en el cliente.

P.D.D. Como os habréis percatado, espero, soy carne de ASP.NET, por eso lo del response.write.

Eha, otro día más...

No hay comentarios: