Newsgroup: it.comp.lang.visual-basic
Titolo: COME ANNULLARE L'EVENTO LOSTFOCUS ?

Ciao a tutti...
Io avrei questo problemino :
Ho due textbox con un controllo di validazione durante l'evento LostFocus,
del tipo :
Private Sub Text1_LostFocus()
   If Text1.Text = "" Then
      ' Codice per reimpostare il focus
      MsgBox "Attenzione !!! Il campo deve essere valorizzato"
      Text1.SetFocus
   End If
End Sub
Private Sub Text2_LostFocus()
   If Text2.Text = "" Then
      ' Codice per reimpostare il focus
      MsgBox "Attenzione !!! Il campo deve essere valorizzato"
      Text2.SetFocus
   End If
End Sub
se, con il focus su Text1, clicco su Text2 ed entrambi i controlli sono
Blank si verifica un loop, in quanto dopo il messaggio generato da Text1
viene effettuata la SetFocus e di consenguenza la LostFocus su Text2 (che
aveva ricevuto il focus) con relativo controllo di validazione e cosě via...
Ringrazio chiunque possa aiutarmi (e anche chi non puň o non vuole).
Ciao e Buon Lavoro
Stefano Castiglioni

emmhhhh !!!  ho dimenticato di formulare la domandina.
Quello che vorrei sapere e se è possibile ottenere qualcosa del genere (o un
pagliativo) :
Private Sub Text1_LostFocus(Cancel as boolean)
   If Text1.Text = "" Then
      MsgBox "Attenzione !!! Il campo deve essere valorizzato"
      Cancel = True
   End If
End Sub
Private Sub Text2_LostFocus(Cancel as boolean)
   If Text2.Text = "" Then
      MsgBox "Attenzione !!! Il campo deve essere valorizzato"
     Cancel = True
   End If
End Sub
Grazie ancora
Stefano Castiglioni (sertu è il nome del buon caro collega che mi ha
prestato l'account)

End Sub

NON PROVARE HO TOPPATO!
Questo l'ho provato e funziona.
(Molto probabilmente esistono delle soluzioni + eleganti)
Private Sub Text1_GotFocus()
    Text1.Tag = "1"
End Sub
Private Sub Text1_LostFocus()
    If Text1.Tag = "1" Then
        Text1.Tag = ""
        If Text1.Text = "" Then
            MsgBox "Valorizzare Text1"
            Text1.SetFocus
        End If
    End If
End Sub
Private Sub Text2_GotFocus()
    Text2.Tag = "1"
End Sub
Private Sub Text2_LostFocus()
    If Text2.Tag = "1" Then
        Text2.Tag = ""
        If Text2.Text = "" Then
            MsgBox "Valorizzare Text2"
            Text2.SetFocus


 Stefano Castiglioni
Se entrambi i campi devono essere valorizzati, potresti utilizzare queste
modifiche:
If Text2.Text = "" Then
    If Text1.Text <> "" Then
        ' Codice per reimpostare il focus sulla text2
        MsgBox "Attenzione !!! Il campo deve essere valorizzato"
        Text2.SetFocus
    Else
        'Se entrambi sono vuote, lo imposta sulla text1
        Text1.SetFocus
    End If
End If
Il text1 rimane invariato mentre nel text2, oltre a rilevare la mancanza della
valorizzazione della text2 stessa, verifica che la text1 sia valorizzata. Nel
caso in cui entrambe le text siano "vuote" il Focus viene settato sulla text1
evitando così il fastidioso loop.
REO

Ciao FRancesco con FR MAIUSCOLA...
Mai visto nulla di piu' elegante, soprattutto se (come nel mio caso) si
usano array di controlli.
Grato per l'eternita' per il piu' che tempestivo, e risolutore, intervento.
Sempre a disposizione nel caso in cui ti serva uno zerbino per il
pianerottolo di casa.
Ciao.
Stefano Castiglioni (sempre con account a scrocco, per il momento).

Ciao REO
Ti Ringrazio moltissimo per il tuo interesse e per la tua soluzione
(ottima).
O ritenuto comunque piu' opportuna al mio caso quella di Francesco che si
adatta anche a situazioni differenti (non limitate alla gestione di due soli
campi, infatti il mio esempio dava ad intendere quello che tu giustamente
hai inteso).
Per quanto riguarda il servizio di zerbinaggio a domicilio puoi sempre
metterti in accordo con Francesco per dividervi la umile prestazione (del
tipo una settimana qui una li....)
Grazie infinite
Ciao
Stefano Castiglioni

Emmmmhhhh !!!
Mi vergogno un pochino a ripropormi ancora con questa martoriante
nefandezza.
Dunque... il problema e' stato risolto egregiamente dai baldi EROI del NG,
ma grazie alle differenze che VB vuole mantenere tra INTERPRETATO e
COMPILATO il tutto non funziona se lo faccio girare come eXE.
Non sono nelle condizioni di poter utilizzare la soluzione proposta da REO
in quanto il tutto si inserisce in una gestione parametrica (e quindi non
sono in grado di determinare quante TextBox dovro' gestire).
Non vorrei zerbinare per tutto l'NG comunque credo di avere ancora della
disponibilita' in termini di tempo per chiunque sia in grado di aiutarmi con
qualcosa sulla falsa riga di quello che ha proposto Francesco.
Ciao e GRAZIE a tutti...
Lo scroccaccount Stefano Castiglioni.

Lo scroccaccount Stefano Castiglioni.
Questo dovrebbe funzionare anche nell'EXE:
A livello di Form dichiari una variabile che viene usata come Flag, poi gli
metti i due controlli sul LostFocus.
---------------------------------------------
Private AltraValorizzazioneInCorso As Boolean
Private Sub Text1_LostFocus()
    If Text1.Text = "" And Not (AltraValorizzazioneInCorso) Then
        AltraValorizzazioneInCorso = True
        MsgBox "Valorizzare Text1"
        Text1.SetFocus
        DoEvents 'Bisogna attendere che il LostFocus
        ' di altri controlli si verifichi prima di azzerare il Flag
        AltraValorizzazioneInCorso = False
    End If
End Sub
Private Sub Text2_LostFocus()
    If Text2.Text = "" And Not (AltraValorizzazioneInCorso) Then
        AltraValorizzazioneInCorso = True
        MsgBox "Valorizzare Text2"
        Text2.SetFocus
        DoEvents
        AltraValorizzazioneInCorso = False
    End If
End Sub
---------------------------------------------
Sappiami dire.
Ciao,
   <--< Nik >-->
Per rispondermi in E-Mail togliere "deleteme" dall'indirizzo.
To reply me by E-Mail remove "deleteme" from my address.

Questa l'ho provata anche compilando, e funziona.
Dim CtrlColInEdit As Control
Private Sub Text1_GotFocus(Index As Integer)
    If Text1(Index) Is CtrlColInEdit Then
    Else
        Set CtrlColInEdit = Text1(Index)
    End If
End Sub
Private Sub Text1_LostFocus(Index As Integer)
    If Text1(Index) Is CtrlColInEdit Then
        If Len(Text1(Index)) = 0 Then
            MsgBox "Text" & Index & " non ha valore!"
            Text1(Index).SetFocus
        End If
    End If
End Sub
-- 
Hi, Ciao
Ettore                 By -MES-
http://freeweb.aspide.it/freeweb/ilmes
Il sito comune di programmatori VB
http://members.xoom.com/it_lang_vb

Ciao Ettore e Nicola,
ho provato entrambe le soluzioni con e senza il controls array, la soluzione
di Nicola si e dimostrata molto valida e semplice con quella di Ettore si e'
verificato lo stesso problema sul compilato (non vorrei aver sbagliato
qualcosa) comunque sono riuscito a risolvere il mio problema.
Nel ringraziarVi volevo approfittare per dire che per lo zerbinaggio ho
qualche problemino, in quanto la maglietta e' un po' lisa. Posso comunque
lavare i piatti (anche se mia moglie dice che sono troppo lento a farlo).
Ciao e un VERO GRAZIE.
Il Pestatasti scroccaccount Stefano Castiglioni.