Newsgroup: it.comp.lang.visual-basic
Titolo: Passaggio da un text box all'altro

Ho un problemino da risolvere: vorrei passare automaticamente da un
text box all'altro non appena il text box viene completamente
riempito, senza perņ dover utilizzare l'evento Change, in quanto
questo viene invocato anche quando il text box viene riempito da
programma e non dall'utente.
Qualcuno ha qualche brillante idea?
Grazie 1000!

 programma e non dall'utente.
Nel keypress/keydown controlli la lunghezza della stringa? :-)

 Qualcuno ha qualche brillante idea?
Dipende da cosa intendi per "completamente".
Se è su singola riga, puoi fare in modo che premendo
Invio passi all'altro campo mettendo il seguente codice
nell'evento KeyPress:
Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Text2.SetFocus
    End If
End Sub
Se è a lunghezza fissa puoi contare i caratteri nell'evento Change:
Private Sub Text1_Change()
    If Len(Text1.Text) >= 10 Then
        Text2.SetFocus
    End If
End Sub
Se, infine, può avere più righe, devi trovare tu un qualche
cosa che possa far capire al VB che il campo è "finito".
--
Er Roscio.

 Qualcuno ha qualche brillante idea?
Immagino che per "completamente" tu intenda fino al raggiungimento di
MaxLenght... In questo caso un idea puo' essere quella di usare comunque
l'evento Change, ma associato ad una funzione del genere:
Sub JumpToTextBox(txtCurrent As TextBox, txtNext As TextBox)
With txtCurrent
    If Len(.Text) = .MaxLength Then
        'attiviamo il "salto" solo se il TextBox chiamante
        'e' effettivamente quello attivo, ovvero con il focus
        If 
Me.ActiveControl.Name
 = .Name Then txtNext.SetFocus
    End If
End With
End Sub
a questo punto, in tutti i tuoi textbox inserisci le chiamate in questo modo
(ovviamente la faccenda si semplifica se lavori con un array di
controlli...)
Private Sub Text1_Change()
JumpToTextBox Text1, Text2
End Sub
e ogni volta che hai bisogno di modificare un TextBox via codice, devi solo
assicurarti che non abbia il focus, per evitare il salto indesiderato; cosa
che per esempio ottieni cosi'
'da il focus alla form, ovvero a nessun controllo in particolare...
Me.SetFocus
Text1.Text = "La rava e la fava"
Indipendentemente dalla bonta' o meno di questa o quella soluzione, valuta
bene l'utilizzo frequente di questi sistemi; il valore aggiunto che danno al
tuo programma e' modesto, ma per contro ti possono creare parecchi
grattacapi per la manutenzione dei sorgenti ogni qual volta tu debba
cambiare il layout della finestra.
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

 Ciao
Voglio provare a vedere se funziona il sistema da te indicato di
mettere il focus sulla form, riempire i textbox e rimettere il focus
dove mi pare: mi sembra interessante!
Grazie 1000!!
Ciao.

 Nel keypress/keydown controlli la lunghezza della stringa? :-)
Ho appena verificato che, quando si verifica l'evento KeyPress (che io
verifico per eseguire del codice se si preme Invio), la lunghezza del
campo inserito non tiene conto dell'ultimo carattere immesso: in altri
termini, se ho già immesso la stringa "ABC" e ho appena digitato "D"
la lunghezza del textbox è 3. Quindi posso risolvere il mio problema
testando la lunghezza della stringa: se è uguale alla proprietà
MaxLength - 1 allora il mio campo è pieno!!
Grazie dell'idea!!
Ciao

 cosa che possa far capire al VB che il campo č "finito".
Grazie dell'interessamento!!
Ciao