Om alle besturingselementen op een formulier een extra gedrag aan te leren, kun je ze opnemen in een speciale collectie van objecten van een zelf gedefinieerde klasse. Dat klinkt pas geleerd!
Het idee is niet zo moeilijk als de zin hierboven. De stappen kunnen er zo uit zien:
De volgende code schrijf je in het formulier (alleen voor tekstvakken):
Private col As New Collection
Private NTB As gTextBox
Private Sub Form_Close()
Set col = Nothing
Set NTB = Nothing
End Sub
Private Sub Form_Load()
Dim ctl As Control
For Each ctl In Me.Controls
If ctl.controlType = acTextBox Then
Set NTB = New gTextBox
Set NTB.TextBox = ctl
col.Add NTB, ctl.Name
End If
Next ctl
End Sub
Het formulier houdt een collectie van exemplaren uit je klasse bij. Er gebeurt niets met die collectie, maar omdat de objecten uit de klasse een variabele WithEvents hebben, gaan de gebeurtenissen naar de objecten. Pas als het object de gebeurtenis niet behandelt, komt-ie terecht in het formulier.
Als het formulier wordt geladen, worden alle tekstvakken "ingeschreven" in de collectie. De variabele NTB wordt 'misbruikt' voor ieder nieuw tekstvak - ik heb deze code overgenomen (van wie ook alweer?) en vermoed dat declaratie in Form_Load ook goed is. Huiswerk!
Het hele gedrag van een tekstvak wordt nu anders.
De klasse gTextBox ziet er bij ons zo uit:
Option Compare Database
Option Explicit
Private WithEvents m_TextBox As TextBox
Private lngOldColor As Long
Public Property Set TextBox(ctl As TextBox)
Set m_TextBox = ctl
m_TextBox.OnGotFocus = "[Event Procedure]"
m_TextBox.OnLostFocus = "[Event Procedure]"
End Property
Private Sub Class_Terminate()
Set m_TextBox = Nothing
End Sub
Private Sub m_TextBox_GotFocus()
lngOldColor = m_TextBox.BackColor
m_TextBox.BackColor = vbGreen
End Sub
Private Sub m_TextBox_LostFocus()
m_TextBox.BackColor = lngOldColor
End Sub
Je ziet dat de gebeurtenissen GotFocus en LostFocus worden gevangen. De achtergrondkleur van het tekstvak wordt groen zolang het element de focus heeft.
Let op de Class_Terminate. Altijd netjes de zooi opruimen!
Succes ermee!