Díky oboum za nakopnutí :-) Událost Validated má nevýhodu, že probíhá i bez změny dat, stačí že ztratí fokus. Na základě toho je dost obtížné sledovat změny. Jedině si pamatovat hodnotu před enterem a pak ji porovnat po validaci. Což ale věc spíš komplikuje Nakonec jsem to "zbastlil" takhle. Pomocí boleánů si sleduji stavy zda je form už nahrán, aby neprobíhali kontroly změn během nahrání a pak teprve zda se změnili hodnoty. V kódu níže tedy uvádím pouze jak se vyřešil průchod a přidání údalostí bez nutností to dělat sepárátně pro každý prvek. Pozn. Formulářové controls mám na panelech takže nejdřív musím projít kolekcí panelů. Třeba Vás napadne jednodušší řešení, ale hlavně že mi to funguje :-)
Private Sub f_Dispatch_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
IsDataChange = False
IsLoad = False
Dim txb As TextBox
Dim mtxb As MaskedTextBox
Dim nud As NumericUpDown
Dim cbx As CheckBox
Dim dtp As DateTimePicker
For Each pnl As Control In Me.Controls
If TypeOf pnl Is Panel Then
For Each ctr As Control In pnl.Controls
Select Case True
Case TypeOf ctr Is TextBox
txb = ctr
AddHandler txb.TextChanged, AddressOf ControlChange
Case TypeOf ctr Is MaskedTextBox
mtxb = ctr
AddHandler mtxb.TextChanged, AddressOf ControlChange
Case TypeOf ctr Is NumericUpDown
nud = ctr
AddHandler nud.ValueChanged, AddressOf ControlChange
Case TypeOf ctr Is CheckBox
cbx = ctr
AddHandler cbx.CheckStateChanged, AddressOf ControlChange
Case TypeOf ctr Is DateTimePicker
dtp = ctr
AddHandler dtp.ValueChanged, AddressOf ControlChange
End Select
Next
End If
Next
IsLoad = True
End Sub
Private Sub ControlChange()
If IsDataChangeMode Then
IsDataChange = True
End If
End Sub
|