¿Cómo puedo hacer que un manejador de eventos único maneje TODO el botón. Haga clic en eventos?

En mi progtwig, tengo 9 botones, y tengo 9 manejadores de eventos separados para cada uno de ellos, a pesar de que el código en cada controlador de eventos es el mismo. Está resultando muy tedioso cambiar el código para todos ellos. ¿Es posible crear un solo Button.Click controlador de eventos que maneja el Button.Click eventos para todos mis botones?

Puede modificar la cláusula Handles en el código de evento generado VS para que pueda procesar el mismo evento para múltiples controles. En la mayoría de los casos, es posible que alguien desee canalizar la mayoría de los clics del botón, pero no todos, a un solo procedimiento. Para cambiar la cláusula Handles:

 Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button1.Click, Button3.Click, Button4.Click ... ' just add the extra clicks for the additional ones ' you will need to examine "Sender" to determine which was clicked ' your code here End Sub 

Esto también se puede hacer de forma dinámica, como para los controles que se crean y añaden a un formulario en el evento Load (o donde sea):

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load AddHandler Button1.Click, AddressOf AllButtonsClick AddHandler Button2.Click, AddressOf AllButtonsClick AddHandler Button3.Click, AddressOf AllButtonsClick End Sub 

Para conectar alfabéticamente todos los botones al mismo evento, puede recorrer la colección de controles (utiliza Linq):

 For Each b As Button In XXXXX.Controls.OfType(Of Button) AddHandler b.Click, AddressOf MyClickHandler Next 

Donde XXXXX podría ser Me o un panel, cuadro de grupo, etc., donde sea que estén los botones.

Puede conectar sus eventos de clic a uno específico. cómo lo hace depende del IDE que esté usando. si está usando Visual Studio, entonces:

seleccione un control de botón y presione F4. Esto abrirá la ventana de propiedades para este control. En la sección de eventos (generalmente un pequeño ícono de rayo) puede asignar varios eventos, que son compatibles con este control en particular. Aquí puede seleccionar cualquier evento específico o crear su propio evento.

A continuación, le mostramos cómo puede hacerlo dinámicamente en tiempo de ejecución para que no tenga que escribir AddHandler para todos los botones:

 Private Sub MainForm_Load(sender As Object, e As EventArgs) Handles MyBase.Load For Each ctrl In Me.Controls If (TypeOf ctrl Is Button) Then _ AddHandler DirectCast(ctrl, Button).Click, AddressOf HandleButtonClick Next End Sub 

Por supuesto, si este es un trazo demasiado amplio, podría poner solo los botones que desea conectar a este evento dentro de un panel, por ejemplo, y simplemente lanzar los controles en YourPanel.Controls en lugar del formulario. O puede establecer la propiedad .Tag en cada botón con algún valor y solo cablear el controlador cuando ese valor coincida. Solo un par de formas en que puedo pensar.