Я всегда думаю, что хороший ответ - это ответ, который говорит о том, как именно мы можем обрабатывать Form1.Button1.Click (или любой другой) в Form1Handler.
Вы можете сделать свои элементы управления в Form1 как Защищенные , по крайней мере, вместо Личные .
Как?
В Form1.Designer.vb : В конце кода вы должны иметь:
Public Partial Class Form1
' ...
Private Button2 As System.Windows.Forms.Button
Private Button1 As System.Windows.Forms.Button
End Class
^^ Затем поменяйте частное на защищенное ...
Protected WithEvents Button2 As System.Windows.Forms.Button
Protected WithEvents Button1 As System.Windows.Forms.Button
Затем добавьте WithEvents , чтобы убедиться, что ваши кнопки объявлены с событиями.
Или в конструкторе IDE (Visual Studio 2010 или SharpDevelop ) нажмите кнопку и на вкладке свойств установите для ее свойства (списка) Модификаторы значение «Защищено». Это изменит его объявление в Form1.Designer.vb. Я знаю, что не добавит «WithEvents».
Теперь вы можете создать Form1Handler, который наследуется от Form1.
Как добавить обработчик событий в Form1Handler?
Сначала создайте метод, который должен обрабатывать ваше нажатие кнопки, в вашем классе Form1Handler.
Private Sub HandleButtonClick(sender As Object, e As EventArgs)
' Instructions for Clicks goes here...
End Sub
Затем создайте метод, который связывает нажатия кнопок с методом выше
Private Sub AddHandlersToButtonClick()
AddHandler Button1.Click, AddressOf HandleButtonClick
AddHandler Button2.Click, AddressOf HandleButtonClick
' Add as many handlers as you wish, calling as many methods as you wish...
End Sub
Наконец, в вашем классе Form1Handler добавьте вызов к предыдущему методу при загрузке:
Private Sub OnForm1Handler_Load() Handles Me.Load
AddHandlersToButtonClick()
End Sub
Теперь, когда вы загружаете свой Form1Handler, который наследуется от Form1, HandleButtonClick (..) запускается каждый раз, когда вы нажимаете на Button1 или Button2.
Теперь, вы можете захотеть сделать что-то другое, когда вы нажимаете на Button3 и когда ваша мышь входит в Panel1 ... Это то же самое:
' Creates as many methods you wish for each of your Form1 Controls,
' ensuring those controls are declared as Protected in Form1.
Private Sub HandleButton1Click(sender As Object, e As EventArgs)
' ...
Private Sub HandleButton2Click(sender As Object, e As EventArgs)
Private Sub HandleButton3Click(sender As Object, e As EventArgs)
Private Sub HandlePanel1MouseEnter(sender As Object, e As EventArgs)
' Then writes in AddHandlersToButtonClick() the dynamic Events handlers
AddHandler Button1.Click, AddressOf HandleButton1Click
AddHandler Button2.Click, AddressOf HandleButton2Click
AddHandler Button3.Click, AddressOf HandleButton3Click
AddHandler Panel1.MouseEnter, AddressOf HandlePanel1MouseEnter
Тогда что, если у вас есть 300 кнопок для обработки?
Хорошо! Если, как и я, вы ленивый человек, и вы просто хотите сделать несколько вещей для одних кнопок и вызывать более крупные методы для других, вы можете использовать свойство Tag своей кнопки в IDE:
- Для Button1 -> Tag = 1
- Для Button2 -> Tag = 2
- ...
- Для Button300 -> Tag = 300
Затем просто используйте метод, представленный выше, и добавьте проверку свойства тега, например:
Private Sub HandleButtonClick(sender As Object, e As EventArgs)
Dim MyButton As System.Windows.Forms.Button
Dim MyButtonIndex As Integer
If TypeOf(MyButton) Is System.Windows.Forms.Button Then ' You should check it's a Button.
MyButton = CType(sender, System.Windows.Forms.Button) ' Option Strict On - Always !
If Integer.TryParse(MyButton.Tag.ToString(), MyButtonIndex) Then
Select Case MyButtonIndex
Case 1:
' Little instruction
Case 2:
' Call a bigger method, with newer parameters
Call HandleMainFormButton1(MyButton, "Houston we have a problem !")
' ...
Case 300:
Call HandleMainFormButton300("Just kidding..!")
Case Else
' This is NOT an indexed Button.
MessageBox.Show("You've forgotten to handle button " + MyButtonIndex.ToString())
End Select
End If
End If
End Sub
^^ CRAZY! Более 300 проверок для кнопки № 300 ... Не забудьте добавить обработчики для 300 кнопок ...
AddHandler Button1.Click, AddressOf HandleButtonClick
AddHandler Button2.Click, AddressOf HandleButtonClick
AddHandler Button3.Click, AddressOf HandleButtonClick
' ...
AddHandler Button299.Click, AddressOf HandleButtonClick
AddHandler Button300.Click, AddressOf HandleButtonClick