2015-11-27 2 views
-1

У меня есть 100 кнопок в форме. Мне нужно обрабатывать события для всех этих кнопок. Например:VB.NET - Работа с большим количеством отправителей событий

Private sub Button_Click(ByVal sender As Object, ByVal e as System.EventArgs) Handles Button1.click, Button2.click, Button3.click ... Button100.click 

печатал каждый из этих отправителей событий немного смешно, есть ли другой способ сделать это? Также, когда у меня есть обработчик событий, есть лучший способ определить отправителя события без огромного количества «если тогда»? то есть не так:

Private sub Button_Click(ByVal sender As Object, ByVal e as System.EventArgs) Handles Button1.click, Button2.click, Button3.click ... Button100.click 
    if sender is Button1 then 'do this 
    if sender is Button2 then 'do this 
    if sender is Button3 then 'do this 
    ... 
    if sender is Button100 then 'do this 
End Sub 

Благодаря

+1

'Typing из [все] те отправители события немного ridiculous' форма 100 кнопок очень смешно. См. [Ваше приложение] (http://i.stack.imgur.com/fvdkb.png) – Plutonix

+0

Является ли часть 'do this' для каждой кнопки совершенно другой для каждого? ... или это то, что можно сделать на основе имени или содержимого кнопки? –

+0

@Idle_Mind Мне просто нужно передать ту кнопку, которая была нажата на ту же подпрограмму, что и кнопка манипулятора (1) buttonhandler (2) и т. Д. – Ewan

ответ

0

Для первого вопроса, посмотрите на this. Просто посмотрите от 1 до 100, получите контрольную ссылку и add the even with AddHandler.

Для вашего второго вопроса свойство Button.Tag существует именно по этой причине. Вы можете поместить любой тип данных, чтобы помочь вам идентифицировать кнопку. То, что вы там вложили, зависит от кода под каждым оператором if. Другим вариантом может быть просмотр имени кнопки.

0

Вот это все вместе взятые:

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim btn As Button 
     For i As Integer = 1 To 100 
      btn = Me.Controls.Find("Button" & i, True).FirstOrDefault 
      If Not IsNothing(btn) Then 
       AddHandler btn.Click, AddressOf ButtonHandler 
      End If 
     Next 
    End Sub 

    Private Sub ButtonHandler(sender As Object, e As EventArgs) 
     Dim btn As Button = DirectCast(sender, Button) 
     ' ... do something with "btn" ... 
     Debug.Print(btn.Name) 
    End Sub 

End Class