Это - просто соглашение, но вероятно более удобный, чем альтернатива. Со статическим основным все необходимо знать для вызова программы Java, название и местоположение класса. Если бы это не было статично, необходимо было бы также знать, как инстанцировать того класса или потребовать, чтобы класс имел пустого конструктора.
В этом случае у вас есть несколько вариантов, потому что обработчики событий не могут использоваться совместно в VBA / VB6
Вариант 1: Используйте функцию централизованной обработки, которая вызывается из каждого обработчика событий.
Sub Control1_ChangeEvent()
CommonChangeEvent // Just call the common handler, parameters as needed
End Sub
Sub Control2_ChangeEvent()
CommonChangeEvent
End Sub
...
Sub CommonChangeEvent(/* Add necessary parameters */)
//Do the heavy lifting here
End Sub
Вариант 2: Организуйте элементы управления в массивах элементов управления.
Sub TextBox_ChangeEvent(Index As Integer)
CommonChangeEvent
End Sub
Sub OtherControlType_ChangeEvent(Index As Integer)
CommonChangeEvent
End Sub
При объединении обоих вариантов общее количество обработчиков событий значительно сократится, а остальные обработчики будут просто безмозглыми. заглушки для одного истинного обработчика событий.
Вы можете создать класс приемника событий, который будет содержать обработку событий код для всех ваших элементов управления определенного типа.
Например, создайте класс с именем TextBoxEventHandler
следующим образом:
Private WithEvents m_oTextBox as TextBox
Public Property Set TextBox(ByVal oTextBox as TextBox)
Set m_oTextBox = oTextBox
End Property
Private Sub m_oTextBox_Change()
' Do something
End Sub
Теперь вам нужно создать и подключить экземпляр этого класса для каждого элемента управления соответствующего типа в вашей форме:
Private m_oCollectionOfEventHandlers As Collection
Private Sub UserForm_Initialise()
Set m_oCollectionOfEventHandlers = New Collection
Dim oControl As Control
For Each oControl In Me.Controls
If TypeName(oControl) = "TextBox" Then
Dim oEventHandler As TextBoxEventHandler
Set oEventHandler = New TextBoxEventHandler
Set oEventHandler.TextBox = oControl
m_oCollectionOfEventHandlers.Add oEventHandler
End If
Next oControl
End Sub
Обратите внимание, что вам нужно добавить экземпляры обработчика событий в коллекцию просто для того, чтобы убедиться, что на них остаются ссылки и, таким образом, сборщик мусора не отбрасывает их до того, как вы закончите с ними.
Очевидно, что этот метод может быть расширен для работы с другими типами управления. Вы можете либо иметь отдельные классы обработчиков событий для каждого типа, либо использовать один класс, который имеет переменную-член (и связанные свойства и обработчик событий) для каждого из типов элементов управления, с которыми вам нужно работать.
Private m_oCollectionOfEventHandlers As Collection
Private Sub UserForm_Initialise()
Set m_oCollectionOfEventHandlers = New Collection
Dim oControl As Control
For Each oControl In Me.Controls
If TypeName(oControl) = "TextBox" Then
Dim oEventHandler As TextBoxEventHandler
Set oEventHandler = New TextBoxEventHandler
Set oEventHandler.TextBox = oControl
m_oCollectionOfEventHandlers.Add oEventHandler
End If
Next oControl
End Sub
Обратите внимание, что причина, по которой вам нужно добавить экземпляры обработчика событий в коллекцию, состоит в том, чтобы просто гарантировать, что они остаются ссылочными и, таким образом, не отбрасываются сборщиком мусора, пока вы не закончите с ними.
Ясно, что это технику можно расширить для работы с другими типами контроля. Вы можете либо иметь отдельные классы обработчиков событий для каждого типа, либо использовать один класс, который имеет переменную-член (и связанные свойства и обработчик событий) для каждого из типов элементов управления, с которыми вам нужно работать.
Private m_oCollectionOfEventHandlers As Collection
Private Sub UserForm_Initialise()
Set m_oCollectionOfEventHandlers = New Collection
Dim oControl As Control
For Each oControl In Me.Controls
If TypeName(oControl) = "TextBox" Then
Dim oEventHandler As TextBoxEventHandler
Set oEventHandler = New TextBoxEventHandler
Set oEventHandler.TextBox = oControl
m_oCollectionOfEventHandlers.Add oEventHandler
End If
Next oControl
End Sub
Обратите внимание, что причина, по которой вам нужно добавить экземпляры обработчика событий в коллекцию, состоит в том, чтобы просто гарантировать, что они остаются ссылочными и, таким образом, не отбрасываются сборщиком мусора, пока вы не закончите с ними.
Ясно, что это технику можно расширить для работы с другими типами контроля. Вы можете либо иметь отдельные классы обработчиков событий для каждого типа, либо использовать один класс, который имеет переменную-член (и связанные свойства и обработчик событий) для каждого из типов элементов управления, с которыми вам нужно работать.