Newsgroup: it.comp.lang.visual-basic
Titolo: Usare lostfocus

Da poco programmo in VB5 e mi sono scontratto con questo problema:
nell'evento lostfocus applico i controlli sugli inserimenti fatti nei
textbox e se ad esempio devo controllare se e' stato inserito qualcosa in un
campo obbligatorio riporto il focus sul campo in questione.
Facendo pero' questo, intanto il focus si e' gia' spostato sul campo
successivo e il programma effettua gia' i controlli al campo successivo
quando ancora dovrebbe rimanere sul precedente!
Applicando questo esempio, il fuoco mi "loopa" all'infinito tra i 2 campi!
************************************************************
Private Sub txtFields_LostFocus(Index As Integer)
  Select Case Index
    Case 1
      If txtFields(1).Text = "" Then
        txtFields(1).SetFocus
      end if
    Case 2
      If txtFields(2).Text = "" Then
        txtFields(2).SetFocus
      End If
  End Select
****************************************************
Come ovviare?
Grazie!
          ______   ___
Bye!  _>cordaWare
Web Page: 
http://www.geocities.com/Hollywood/Set/9095/

Ciao.
Imposta la proprietą TabStop dei controlli txtFields su False, e poi usa il codice seguente...
Private Sub txtFields_KeyPress(Index As Integer, KeyAscii As Integer)
    If KeyAscii = 9 Then
        If txtFields(Index).Text = "" Then
            KeyAscii = 0
        Else
            'se sono sull'ultimo controllo dell'array, allora do il focus al primo, altrimenti a quello successivo
            If Index < 1 Then
                txtFields(Index + 1).SetFocus
            Else
                txtFields(0).SetFocus
            End If
        End If
    End If
End Sub
Ciao,
#sirri#@
tin.it
(togliete "#" dall'indirizzo)

La soluzione consiste nel non riportare il fuoco sul controllo appena
lasciato.
Per esempio, prima di lasciare la textbox,  puoi scrivere una stringa nulla
se il controllo sui dati da un esito negativo. In un evento click di un
comando di conferma controlla se le text box sono tutte <> da stringa
nulla.
Ciao Marco
-- 
Remove xxx from E-mail.

Sinceramente io ho abbandonato questo metodo...
In una maschera di inserimento ci sarà per forza una pulsante OK, allora
creo delle funzioni che mi controllino uno o più campi e le eseguo nel
pulsante OK.
Es.:
nell'evento click del Pulsante OK
dim FlagOK = boolean
FlagOK=False
if FlagOK then FlagOK = ControlloData
if FlagOK then FlagOK = ControlloCampiVuoti
if flagok=false then exit sub
...eseguo il comando OK
Nelle funzioni metto:
Private Function ControlloData() as Boolean
    Controllodata=isdate(MioText.Text)
    if ControlloData=False then
        MSGBOX "Errore nella data"
    end if
end function
Private Function ControlloCampiVuoti() as Boolean
    if Campo1.text="" then
        MSGBOX "Campo1 non può contenere un valore nullo!"
        ControlloCampiVuoti=False
        Campo1.setfocus                 'in questo punto metto il focus sul
campo che provoca l'errore
        Exit function
    end if
    if Campo2.text="" then
        MSGBOX "Campo2 non può contenere un valore nullo!"
        ControlloCampiVuoti=False
        Campo2.setfocus
        Exit function
    end if
ControlloCampiVuoti=true
end function
Ciao
Andrea