Newsgroup: it.comp.lang.visual-basic
Titolo: evento xxxFOCUS... come distruggerlo?

Ciao a tutti,
ho scritto alcune SUB per verificare la corrispondenza di un testo
con una maschera da me scelta. Queste routine le utilizzo sia nel
momento in cui viene perso il Focus da un oggetto.text in un form
sia durante la fase di digitazione dello stesso (c'è un cambiamento
del colore quando il confronto con la maschera da' esito positivo)
Le difficoltà che non riesco a risolvere sono principalmente due.
La prima è la possibilità di distruggere (usando le API???) l'evento
lostFocus quando la condizione di uscita non viene soddisfatta (a meno
che non venga premuto un pulsante di annullamento/uscita dal form).
Ho provato a forzare con getFocus sull'oggetto.text stesso ma nel
caso tentassi di spostarmi su un'altro oggetto con il "controllo di
maschera" và tutto in loop...
La seconda domanda che vi pongo, sempre legato allo stesso problema:
esiste la possibilità inserire in qualche modo queste routine su
tutti gli oggetti del form (in run-time si deciderà se l'oggetto ha o
meno la maschera) in modo che per qualsiasi evento venga generato passi
prima per una mia routine (sempre quella (gli oggetti (nuovo e vecchio)
e l'evento sono passati come parametri)) e poi (nel caso non
distruggessi l'evento) il programma continuerebbe con le proprie routine
*.*focus, *.key*, ecc... come se niente fosse?
E possibile fare questo con il VB4?
Grazie,
  AiN
P.S.
Esiste qualche libreria con la funzione MD5SUM? Come fare a lanciarla?

 lostFocus quando la condizione di uscita non viene soddisfatta
Personalmente non amo mettere codice nell'evento LostFocus, nemmeno per
validare.
Preferisco validare l'oggetto precedente quando accedo a un nuovo oggetto.
Quello che segue è un esempio molto semplice e facilmente interpretabile di
quello che intendo.
'Crea sul form due TextBox (Text1 e Text2)
'   Si presume che il primo debba contenere un numero,
'   il secondo una data
Dim oggetto_precedente As Object
Private Sub Form_Load()
    Set oggetto_precedente = Nothing
End Sub
Private Sub Text1_GotFocus()
    If verifica_oggetto_precedente Then Exit Sub
End Sub
Private Sub Text2_GotFocus()
    If verifica_oggetto_precedente Then Exit Sub
End Sub
...
Function verifica_oggetto_precedente() As Boolean
    errato = False  'Tutto OK (True se validazione errata)
    Do
        If oggetto_precedente Is Nothing Then
            Exit Do
        End If
        If oggetto_precedente Is Text1 Then
            If IsNumeric(Text1.Text) = 0 Then errato = True
            Exit Do
        End If
        If oggetto_precedente Is Text2 Then
            If IsDate(oggetto_precedente) = 0 Then errato = True
            Exit Do
        End If
'        If oggetto_precedente Is ... Then
'            If ... Then errato = True
'            Exit Do
'        End If
        Exit Do
    Loop
    If errato Then oggetto_precedente.SetFocus
    Set oggetto_precedente = Screen.ActiveControl
    verifica_oggetto_precedente = errato
End Function

 quello che intendo.
Ho capito quello che intendi... ma il codice scritto con la validazione
all'inizio dell'evento GotFocus è un po' "pesante" nel senso che mi fa'
aggiungere la condizione all'interno di ogni oggetto che può ricevere il
focus (se ho 2 soli oggetti cui devo verificare i dati e 20 oggetti text
liberi, devo fare un copia/incolla su tutti i 22 gotfocus - nel caso me
ne dimenticassi 1 ... :(   ).
Io cercavo invece il modo di rendere il codice più trasparente, volevo
scrivere una tabella di oggetti "standardizzati" per tutto il progetto
(riconoscibili attraverso il nome) in modo che il programma stesso ad
*ogni movimento del focus* validasse o meno i dati in automatico.
In questo modo non dovrei scrivere una riga di codice... :) Ehh, si.
Sono molto pigro. :)
Ciao,
AiN.

 funzione lostFocus?
E' molto semplice: Non è detto (verifiche di qualche SP fa, ma ormai con
codice già scritto per aggirare il problema) che il LostFocus venga attivato
prima del GotFocus.
Chiaramente un buco, magari di controlli particolari (anche se solo MS).
Vero, occorre molto più codice in ogni GotFocus (e anche in Click, perchè
non è detto che il Got avvenga prima del Click), ma, tant'è, così sono
tranquillo. Col SubClassing è molto meno pesante, ma, pur avendolo provato,
non l'ho mai applicato.

 prima del GotFocus.
Ma questo bug è stato risolto, vero? Ti ricordi vagamente in quale
versione era presente? 
O forse il codice a cui ti riferisci è quello di MS. ==:!
Grazie,
AiN