Newsgroup: it.comp.lang.visual-basic
Titolo: Controllare il tasto TAB

    Premetto che avendo grosse difficoltà nella gestione del controllo Adodc
sono ritornato an VB5.
    Stò cercando di gestire 3 textbox e, per ognuno di questi tre controlli
gestisco l'input con il metodo Keypress.
    Non avendo a disposizione in VB5 il metodo Validate per le textbox come
posso fare per evitare che premendo il tasto TAB il fuoco passi alla textbox
successiva se il controllo che ha ceduto il fuoco (lostfocus) è vuoto???
(text1="" )
    Più semplicemente, c'è un sistema per inibire il tasto TAB in presenza
di certe particolari situazioni ???
Grazie mille
Stefano

 ha scritto nel messaggio news:darm5.75334$dF5.1...@news.infostrada.it...

Potresti provare a mettere nell'evento TextBoxN_LostFocus la tua routine
di validazione del contenuto del campo (che avverrebbe quindi alla pressione
del tasto Tab) e in caso di esito negativo fai un TextBoxN_SetFocus
Esempio:
Private Sub Text1_LostFocus()
If Text1.Text = "" Then
  Beep
  Text1.SetFocus
End If
End Sub
Non e' il massimo, ma funziona...
--
Frogman
indirizzo e-mail corretto: 
be...@reboot.to

 Non e' il massimo, ma funziona...
[snip]
E se il controllo successivo in ordine di tabindex ha lo stesso problema di
validazione ?  Ti infili in un bel loop, perchè da quanto ho visto il
secondo controllo riceve lo stato attivo PRIMA che si attivi l'evento
lostfocus del primo...
Il tutto ovviamente con VB5, perchè in VB6 c'è un bellissimo nuovo evento
che si chiama VALIDATE, ottimo per chi (come me) era abituato a sviluppare
in Clipper ed a utilizzare le clausole VALID delle SAY..GET..
Non ho trovato metodi simpatici per risolvere il prbl, se non scrivere
pezzettoni di codice che (se i controlli da validare sono parecchi)
diventano tediosi.
    Saluti post-feriali
        Massimo

 > Frogman:

Se ho colto il senso del discorso credo che, quando non esiste
l'evento Validate, sia buona norma comportarsi nel modo
seguente:
Option Explicit
Private Sub Text1_GotFocus( _
)
  '
  If Not (ActiveControl Is Text1) Then Exit Sub
  ' [...]
  '
End Sub
Private Sub Text1_LostFocus( _
)
  '
  With Text1
    If Len(.Text) = 0 Then
      Call Beep
      Call .SetFocus
    End If
  End With
  '
End Sub
Private Sub Text2_GotFocus( _
)
  '
  If Not (ActiveControl Is Text2) Then Exit Sub
  ' [...]
  '
End Sub
Private Sub Text2_LostFocus( _
)
  '
  With Text2
    If Len(.Text) = 0 Then
      Call Beep
      Call .SetFocus
    End If
  End With
  '
End Sub
L'uso di With ti permette di copiare/incollare e modificare il
nome del controllo un'unica volta.
Oppure, "centralizzare":
Private Sub TextBox_GotFocus( _
  ByRef TextBox As VB.TextBox _
)
  '
  If Not (ActiveControl Is TextBox) Then Exit Sub
  ' [...]
  '
End Sub
Private Sub TextBox_LostFocus( _
  ByRef TextBox As VB.TextBox _
)
  '
  With TextBox
    Select Case .Name
    Case "Text1", "Text2"
      If Len(.Text) = 0 Then
        Call Beep
        Call .SetFocus
      End If
      '
    Case Else
      ' [...]
      '
    End Select
  End With
  '
End Sub
Private Sub Text1_GotFocus( _
)
  '
  Call TextBox_GotFocus(Text1)
  '
End Sub
Private Sub Text1_LostFocus( _
)
  '
  Call TextBox_LostFocus(Text1)
  '
End Sub
Private Sub Text2_GotFocus( _
)
  '
  Call TextBox_GotFocus(Text2)
  '
End Sub
Private Sub Text2_LostFocus( _
)
  '
  Call TextBox_LostFocus(Text2)
  '
End Sub
... analogamente, con una matrice di controlli.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X