Option Explicit
'Det här dialog exemplet innehåller två textrutor, txtMyFirstField och txtMyFirstField
'samt en OK-knapp och en CANCEL-knapp.
Private Const MY_FIRST_FIELD_RULE = "txtMyFirstField"
Private Const MY_SECOND_FIELD_RULE = "txtMyFirstField"
Private WithEvents mobjBrokenRules As CBrokenRules
Private Sub CancelButton_Click()
Unload Me
End Sub
Private Sub Form_Load()
Set mobjBrokenRules = New CBrokenRules
'Initiera regeler
mobjBrokenRules.RuleBroken MY_FIRST_FIELD_RULE, Not (txtMyFirstField = "")
mobjBrokenRules.RuleBroken MY_SECOND_FIELD_RULE, Not (Len(txtMySecondField) = 5)
UpdateButtons
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set mobjBrokenRules = Nothing
End Sub
Private Sub OKButton_Click()
'Ta hand om data från dialogen
'I det här exemplet gör vi inget förutom att stänga formuläret.
Unload Me
End Sub
'Mitt första fält har regel att det måste var tomt (txtMyFirstField = "")
'Kanske en konstig regel men vi kör så i detta exempel.
Private Sub txtMyFirstField_Change()
mobjBrokenRules.RuleBroken MY_FIRST_FIELD_RULE, Not (txtMyFirstField = "")
End Sub
'Mitt andra fält ska vara exakt 5 tecken långt
Private Sub txtMySecondField_Change()
'Denna IF sats används för att informera användaren om att för många tecken har skrivits in
If Len(txtMySecondField) > 5 Then
'Vidta lämplig åtgärd om för många tecken matats in.
' t ex Err.Raise vbObjectError + 1000, "MySecondField_Change", "För många tecken"
'I detta exempel ändrar vi färg på bakgrunden om det är för många tecken.
txtMySecondField.BackColor = vbRed
Else
txtMySecondField.BackColor = vbWindowBackground
End If
'Kontrollera
mobjBrokenRules.RuleBroken MY_SECOND_FIELD_RULE, Not (Len(txtMySecondField) = 5)
End Sub
Private Sub mobjBrokenRules_BrokenRule()
'Någon regel är inte uppfylld
UpdateButtons
End Sub
Private Sub mobjBrokenRules_NoBrokenRules()
'Alla regler har uppfyllts
UpdateButtons
End Sub
Private Sub UpdateButtons()
Me.OKButton.Enabled = mobjBrokenRules.IsAllValid
End Sub