Tengo un formulario con varios botones quiero saber cual se presionó [SOLUCIONADO]

En ocasiones, al diseñar una aplicación en Visual Basic, los desarrolladores se enfrentan al escenario de tener un formulario con múltiples botones y necesitar identificar cuál de ellos fue activado por el usuario. Determinar la acción específica tomada es vital para un comportamiento adecuado de la aplicación y para proporcionar la mejor experiencia de usuario posible.

Para lograr dicha identificación, Visual Basic ofrece diferentes enfoques que se pueden adaptar dependiendo del diseño del formulario y las necesidades del programador. A continuación, se describirán diversas técnicas y se proporcionará código ejemplo.

**Eventos Delimitados por Botón**

Una manera muy intuitiva de saber qué botón fue presionado en un formulario es crear un evento `Click` delimitado e individual para cada botón. Mediante este método, cada botón estará asociado directamente con su acción correspondiente.

vb
Private Sub btnBoton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBoton1.Click
‘ Código específico para el botón 1
End Sub

Private Sub btnBoton2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBoton2.Click
‘ Código específico para el botón 2
End Sub

En los fragmentos de código anterior, se puede observar que cada procedimiento maneja independientemente un botón en particular, identificado como `btnBoton1` y `btnBoton2`, respectivamente. Cuando uno de los botones es presionado, su correspondiente bloque de código es ejecutado.

**Gestión de Eventos Consolidada**

En lugar de tener un manejo de evento para cada botón, se puede tener un procedimiento común que responda a los eventos de varios botones. Se identifica a través del parámetro `sender`, que contiene una referencia al objeto que desencadenó el evento.

vb
Private Sub btnAnyButton_Click(ByVal sender As System.Object, ByVal a As System.EventArgs) Handles btnBoton1.Click, btnBoton2.Click
Dim botonPulsado As Button = CType(sender, Button)

Select Case botonPulsado.Name
Case “btnBoton1”
‘ Código para cuando el Botón 1 es presionado.
Case “btnBoton2”
‘ Código para cuando el Botón 2 es presionado.
End Select
End Sub

Esta estructura permite un manejo de código más limpio y minimiza la repetición de código cuando los botones comparten funciones comunes.

**Utilización de la Propiedad `CommandName`**

Para aplicaciones más complejas, usando controles como `Repeater`, `GridView`, entre otros, es posible identificar el botón que se ha pulsado mediante la propiedad `CommandName`. Este enfoque es beneficioso para detectar qué acción realizar base en el nombre de comando asignado a la propiedad del botón.

vb
Protected Sub onCommand(sender As Object, e As CommandEventArgs)
Select Case e.CommandName
Case “Editar”
‘ Código para editar
Case “Eliminar”
‘ Código para eliminar
‘…y así con cada posible comando.
End Select
End Sub

Esta técnica se enfoca en la ejecución de diferentes bloques de código en función de la operación que ha solicitado el usuario, siendo las instrucciones enviadas por botones con comandos claramente delimitados.

**Identificar Clics Mediante la Propiedad `Tag`**

Otra alternativa para diferenciar qué botón fue presionado es usar la propiedad `Tag`. Esta puede contener cualquier objeto, incluso una cadena, por lo que puede actuar como una marca que identifica el propósito del botón.

vb
Private Sub btnGeneral_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBoton1.Click, btnBoton2.Click
Dim boton As Button = DirectCast(sender, Button)

If boton.Tag.ToString() = “Acción1” Then
‘ Código para la Acción 1
ElseIf boton.Tag.ToString() = “Acción2” Then
‘ Código para la Acción 2
End If
End Sub

En este fragmento de código, se utiliza el `Tag` para asignar una etiqueta que posteriormente se lee en el evento `Click` y se toman las decisiones correspondientes.

**Uso de Lambdas y Funciones Anónimas**

Otra estrategia avanzada es la utilización de expresiones lambda o funciones anónimas para asignar eventos de click directamente en la creación del botón. Esto elimina la necesidad de establecer explícitamente un `Handles` hacia un evento predefinido y permite encapsular la lógica de clic en un espacio más controlado.

vb
AddHandler btnBoton1.Click, Sub(sender, e)
‘ Código para el botón 1
End Sub
AddHandler btnBoton2.Click, Sub(sender, e)
‘ Código para el botón 2
End Sub

Al usar expresiones lambda, cada botón tiene una reacción específica a un clic, sin necesidad de relacionarlo explícitamente con procedimientos o funciones anotadas. La lógica se torna más directa y contextualizada al punto donde el componente es creado y configurado.

Estas estrategias mencionadas a lo largo del artículo resultan en **acción específica del formulario**, un desafío muy común cuando trabajamos con múltiples botones en un solo formulario en Visual Basic. Al elegir con cuidado la estrategia que mejor se adapta a la estructura y necesidades de la aplicación, el proceso de identificar cuál botón fue activado será mucho más efectivo y mantendrá el código organizado y claro.

Es vital para un buen diseño de interfaz de usuario tener un código estructurado que permita una **gestión eficiente de botones en Visual Basic** y, a su vez, es una excelente práctica para optimizar el mantenimiento y actualización de la aplicación en el futuro. El manejo acertado de estos escenarios mejora notablemente la interacción del usuario con la aplicación, entregando una experiencia consistente y libre de errores inesperados durante la ejecución de sus tareas.

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad