Newsgroup: it.comp.lang.visual-basic
Titolo: tab

e' possibile "intercettare" la pressione del tasto TAB ,al pari del tasto
ENTER ?
o servono accorgimenti particolari ?
Grazie

 o servono accorgimenti particolari ?
La mia risposta č "in condizioni normali (piů di un controllo con TabStop),
no", ma mi pare che, a tal proposito, tu abbia avuto un numero di risposte
sufficienti... qual č il nuovo problema?

 ha scritto nel messaggio
news:botbnn$1h59ek$1...@ID-174464.news.uni-berlin.de...


 ...come quando premo ad es. ENTER.
Come già detto, non ti serve intercettare il tasto TAB se l'effetto che vuoi
ottenere è quello di finire sulla text successiva.
Quindi i casi sono 2: non è quello che devi fare, oppure non ho capito un
belino io...

 ...come quando premo ad es. ENTER.
Ok, è chiaro che tu scrivi a raffica e non leggi le risposte...

 ...come quando premo ad es. ENTER.
Credi di aver capito il tuo problema, allora:
tua hai una serie di controlli attraverso i quali ti vuoi muovere con un
certo odine. Con enter lo fai tranquillamente perchè lo gestisci da
keypress, con tab no perchè se pigi tab (con proprietà TabStop = TRUE) non
si verifica l'evento keypress, giusto?
Provato a gestire questa cosa dall'evento LostFocus el controllo che lasci?
Ciao, SK

[*SpecialKeta" <?chr(107) & "
100...@yahoo.com
* = ?chr(107) &
"
100...@yahoo.com
" in news:Wmrsb.13978$
hV.5...@news2.tin.it
] ha scritto:

Fermo restando che consiglierei di usare (per istruzioni) l'evento LostFocus
solo al mio peggior nemico, come si potrebbe rilevare il tasto usato da tale
evento?
Si può, ovviamente, intercettare l'evento di abbandono (a volte dopo il
GotFocus del nuovo controllo), ma non il tasto che l'ha provocato.
Il Tab se l'è tenuto Bill ed è inutile che ci giriamo intorno, se vi sono
almeno due controlli col TabStop NON è intercettabile. Una cassa di birra a
chi mi dimostra il contrario (con VB pulito, senza subclassing, API e/o
ammenicoli vari che non siano propri di VB).

 subclassing, API e/o ammenicoli vari che non siano propri di VB).
Dopo quello che mi è successo ieri con ADO, adesso scommetterò anche io
contro "quella" parte.
Ciao, SK

 davvero?
Se n'č parlato tanto tempo fa:
'Ho errato citando il GotFocus al posto del Click,
'ma il concetto č analogo, per certi versi ancor peggio visto che il piů
delle volte il click ospita istruzioni, mentre il Got, statisticamente,
meno.
'Su un form si crei:
'   un TextBox (Text1)
'   un CommandButton (Command1)
'   un ListBox (list1)
'poi si incolli il codice che segue.
'
'Si veda la sequenza degli eventi usando il tasto Tab
'e la stessa con Alt+C quando il fuoco č sul TextBox
Private Sub Form_Load()
    Text1.TabIndex = 0
    Command1.TabIndex = 1
    List1.TabIndex = 2
    Command1.Caption = "&Command1"
End Sub
Private Sub Command1_Click()
    List1.AddItem "Button-Click"
End Sub
Private Sub Command1_GotFocus()
    List1.AddItem "Button-Got"
End Sub
Private Sub Command1_LostFocus()
    List1.AddItem "Button-Lost"
End Sub
Private Sub Text1_GotFocus()
    List1.AddItem "Text-Got"
End Sub
Private Sub Text1_LostFocus()
    List1.AddItem "Text-Lost"
End Sub

 ammenicoli vari che non siano propri di VB).
Premessa: sono ignorante e non voglio dimostrare nulla. Vi riporto solo lo
stato delle mie conoscenze.
L'unico modo per utilizzare il tab all'interno di una textbox quando sul
form ci sono pił controlli con tabsto=true, č quello di intercettare la
pressione del tab, quindi impostare a false il tabstop di tutti gli altri
controlli, inserire la tabulazione e poi ripristinare il tabstop degli altri
controlli.
Il codice ve lo riporto qui sotto:
Sub DisableTabStops(Optional restoreIt As Variant)
    Static SaveTabStop(255) As Boolean
    Dim Index As Integer
    Dim currForm As Form
    'non tutti i controlli espongono la priprietą tabStop
    On Error Resume Next
    Set currForm = Screen.ActiveForm
    If IsMissing(restoreIt) Then restoreIt = False
    If restoreIt = False Then
        'salva il valore corrente della proprietą TabStop
        ' prima di impostarlala False
        For Index = 0 To currForm.Controls - 1
            SaveTabStop(Index) = currForm.Controls(Index).TabStop
            currForm.Controls(Index).TabStop = False
        Next
    Else
        'ripristina le impostazioni precedenti
        For Index = 0 To currForm.Count - 1
            currForm.Controls(Index).TabStop = SaveTabStop(Index)
            SaveTabStop(Index) = False
        Next
    End If
End Sub
ogni routine puņ essere invocata dagli eventi GotFocus e LostFocus, cme
segue:
Private Sub Text1_GotFocus()
    'disabilitą la proprietą tabstop per tutti i controli
    DisableTabStops
End Sub
Private Sub Text1_LostFocus()
    'ripristina le impostazioni precedenti
    DisableTabStops True
End Sub
Quelo che ho notato con questo codice č:
1) funziona benino
2) se c'č una array di controlli, pare che poi il tab funga solo col primo
controllo dell'array
quindi una sistematina bisogna dargliela.
Ora io non ho idea di cosa sia il subclassing esattamente, le mie conoscenze
sono troppo di base. Ma credo che questo sia VB puro.
Ovviamente, per non prendermi nessun merito/demerito, questo codice non l'ho
scritto io, l'ho preso pari pari da un "trucco", uno dei tanti scritti da
Francesco Balena nel suo libretto zeppo di trucchetti per VB6.
Spero di essere stato utile.
Ciao

Mi sono scordato un afregatura, ma credo che sia ovvia del resto. Una volta
dentro la textbox, non se ne può + uscire con il tasto tab.
Ciao

 volta dentro la textbox, non se ne puň + uscire con il tasto tab.
non č del tutto vero. se intercetti il tasto tab nell'evento keydown della
form (keypreview a true) passi a mano il focus sul controllo successivo.
anzi: secondo voi, ci sono particolari controindicazioni a lavorare cosě di
"default"?
--
Salutoni
Sergio
per rispondere... togli il group dall'indirizzo

 "default"?
OK
allora userò il tutto nel mio software :D
Ciao e grazie per la dritta

         For Index = 0 To currForm.Controls - 1
questa riga č sbagliata, va sostituita con:
For Index = 0 To currForm.Count - 1
scusate ma č scritto cosě proprio nel libro (errore di stampa?).
Ciao

 Se n'è parlato tanto tempo fa:
letto e provato.
mi ritiro sconfitto uscendo dalla porta, poi la apro e infine la richiudo.
Ciao, SK
--
La pasienzia non è mai troppo (Totò).
<><><>
Esistono 10 tipi di persone: chi conosce il binario e chi no.

 o servono accorgimenti particolari ?
propongo la mia:
perchè non mettere un controllo di testo che si sposta sopra delle label?
il focus l'avrà sempre lo stesso testo che si sposterà via via sulle label
assumendone il valore e impostando il loro valore quando si troverà sopra
una di esse. voi che dite? ^__^

 quindi una sistematina bisogna dargliela.
A parte questo... si veda questo sotto, con un po' di ... fantasia per
l'esempio del Balena...
'Si creino su un form i seguenti controlli:
'Un optionbutton (option1)
'Un optionbutton (option2)
'Un commandbutton (Command1)
'Un commandbutton (Command2)
'
'Si incolli il codice che segue.
'
'Si giochi col Tab a piacere, tutto a posto!
'Si clicchi sul Command2 e si giochi col Tab... Tutto a posto?
'Si clicchi sul Command1 e si giochi col Tab... Tutto a posto?
Private Sub Form_Load()
    Option1 = 1
End Sub
Private Sub Command1_Click()
    Option1.TabStop = 1
End Sub
Private Sub Command2_Click()
    Option2.TabStop = 1
End Sub