Buongiorno,
spero di non aver sbagliato titolo e,
come ho fatto in altre occasioni, procedo prima ad una panoramica e poi al problema:
Ho 3 Maschere: Maschera A, Maschera B e Maschera C. (intendo effettivamente solo 3 maschere - nessuna maschera doppione)
- In ogni Maschera A ci sono 04 Maschere B;
- In ogni Maschera B ci sono 14 Maschere C;
- In ogni Maschera C ci sono 04 TextBox;
Il Codice della maschera C è:
Option Compare Database
Private colTxtObj As New Collection
Private Sub Form_Load()
Dim txtObject As clsTextBox
Dim oCtrl As Access.Control
For Each oCtrl In Me.Controls
If oCtrl.ControlType = acTextBox Then
Set txtObject = New clsTextBox
oCtrl.OnChange = "[Event Procedure]"
oCtrl.OnKeyDown = "[Event Procedure]"
oCtrl.OnExit = "[Event Procedure]"
oCtrl.OnEnter = "[Event Procedure]"
Set txtObject.setItem = oCtrl
colTxtObj.Add txtObject
If Me.RecordsetClone.RecordCount > 0 Then
Debug.Print oCtrl.Name
oCtrl.SetFocus
Call txtObject.TestDebug
End If
End If
Next
Set txtObject = Nothing
Set oCtrl = Nothing
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set colTxtObj = Nothing
End Sub
La classe instanziata nella maschra C ha il seguente codice:
Option Compare Database
Public WithEvents mTxtObject As Access.TextBox
Public Property Set setItem(textBoxControl As Access.TextBox)
Set mTxtObject = textBoxControl
End Property
Private Sub Class_Terminate()
Set mTxtObject = Nothing
End Sub
Private Sub mTxtObject_Change()
'Codice che gestisce cosa deve succedere se modifico il valore di un textbox
End Sub
Private Sub mTxtObject_Enter()
'Codice che gestisce cosa deve succedere se "entro in un textbox"
End Sub
Public Function TestDebug()
Debug.Print mTxtObject.Name & " - " & mTxtObject.Value
End Function
All'apertura della maschera A, a cascata, vado ad aggiornare mediante ciclo for il recordsource di ognuna delle maschere C in maniera che ognuna presenti dati differenti.
Me.Controls("sfrm_HrzMilTwiceWeek_" & CStr(i)).Form.Controls("sfrm_HrzMilDay_" & CStr(j)).Form.RecordSource = strSQL
in pratica ogni maschera C mi fa vedere in nei 4 textbox, orario programmato di lavoro, orario effettuato, differenza ore, ore eccedenti.
E tutto va egregiamente nel senso che:
. quando la maschere A, B e C sono caricate i dati sono visualizzati correttamente e la modifica ai dati nei singoli textbox modifica in maniera corretta la tebella cui punta il recordsource;
- Se cambio valore nei textbox accade esattamente quello che ho previsto nell'evento onchange della classe ecc.
il problema riguarda un'operazione che vorrei fare nel momento in cui tutte le maschere sono state caricate ovvero, in particolare, mi piacerebbe controllare che il testo inserito nel textbox dell'orario programmato equello inserito nell'orario effettuato siano conformi ai criteri di input da me impostati all'interno della classe... una specie di maschera di input intelligente personalizzata per intendersi... solo che mi piacerebbe farlo sututte le maschere C che vedo sullo schermo (ovvero vorrei controllare tutti le 56 instanze alla Form...
la cosa bella è che, come detto in precedenza, se l'utente interagisce con i textbox tutto funziona regolarmente, ma se ad esempio in un textbox c'è un dato non conforme già inserito non riesco a rilevarlo al momento dell'aperture e non riesco a capire perché...
infatti se guardano l'esito della funzione pubblica "TestDebug" sembra quasi che il recordsource non sia stato aggiornato dalle istruzioni che ho inserito nella maschera A .. come se tali istruzioni fossero eseguite solo al termine del caricamento di tutte le sottomaschere B e C e quindi come se le istruzioni di quest'ultima maschera si riferissero ad un recordsource non aggiornato...
So che quello che ho scritto non è di facile comprensione ma io ci provo lo stesso...
Grazie