Millo, non ho parole!
Riscrivendomi il codice mi hai dato tanti spunti che ignoravo.
Le cose che mi sembra di aver capito sono che:
1) Le proprietà della classe che vengono create hanno dei metodi _read() e _write() che vengono invocati quando si legge o si scrive una di queste proprietà della classe. Quindi sono ottimi quando si vuol fare un controllo oppure quando si vuol tentare il calcolo di una funzione, ecc.
La proprietà CodiceFiscale è l'unica di sola lettura... perché giustamente deve essere calcolata (e non inserita a mano).
2) La funzione CalcoloCodiceFiscale() restituisce un booleano... quindi se tutti i termini sono stati specificati, calcola il $CodiceFiscale e restituisce un TRUE, altrimenti se ci sono errori restituisce FALSE ed invoca la funzione NoCodice() --> questa attribuisce "" a $CodiceFiscale e... (qui ho un grosso dubbio) con
RAISE richiama CalculateCode della FMain?
3) La funzione CalculateCode della FMain attribuisce $CodiceFiscale (ossia Persona.CodiceFiscale) alla txtCodiceFiscale... e se Persona.CodiceFiscale è vera (ossia diversa da ""
) allora inserisce i .Caption alle Label della tessera sanitaria.
4) Ogni volta che viene editata una proprietà in scrittura (cognome, nome, datanascita, ecc.), se il CalcoloCodiceFiscale() è TRUE, allora invoca CalculateCode della FMain... e si torna al punto 3).
5) Chiaramente quando viene chiesto se CalcoloCodiceFiscale è TRUE o FALSE implicitmente viene fatto eseguire... quindi assegnerebbe $CodiceFiscale se fosse TRUE...
Questo è quello che sono riuscito a capire, e spero sia corretto.
Ho anche una grossa lacuna quando nella FMain dichiari:
...che vuol dire che l'istanzi con...
Persona = NEW CPers As "Persona"
PS: vedi la parte di codice quando comincia la funzione CalcoloCodiceFiscale()...
If $Cognome = "" Then Return NoCodice()
If $Nome = "" Then Return NoCodice()
If IsNull($DataNascita) Then Return NoCodice()
If $CodiceIstat = "" Then Return NoCodice()
If $Sesso = "" Then Return NoCodice()
Io mi chiedevo se esiste una funzione che esegua il controllo tipo:
FOR EACH proprietà IN CPers
IF proprietà = "" then Return NoCodice()
NEXT
Se i campi da controllare fossero tanti sarebbe un buona alternativa a tutti gli IF...