Intercettare il tasto Tab in vb net 2005

mercoledì 22 marzo 2006 - 20.13

trinity Profilo | Guru

Ragazzi ho una form con tre textbox che eseguono del codice nell'evento Validating e successivamente se e.cancel=False esegue del codice nell'evento Validated...
Comunque la mi adomanda è la seguente: io vorrei che quando il cursore si trova in un delle textbox e premo il pulsante "TAB", mi deve eseguire il codice altrimenti se io mi sposto in un'altra textbox con il click del mouse senza utilizzare il "TAB", il codice della prima etxtbox non deve essere eseguito, invece avviene:

un esempio

Dim intkeycode as Integer=0 Private Form1_KeyDown(....) if (e.KeyCode=Keys.Tab) then intkeycode=9 End if End Sub() Private Sub TextBox2_Validating(Byval........) Select Case Intkeycode Case Keys.Tab If me.textbox2.text="" then Msgbox("Errore") e.Cancel=True End if End Select End Sub()

solo mi sono accorto che l'evento keydown della form non viene attivato se io mi limito solo a passare con il click del mouse tra un textbox e l'altra e quindi la variabile intkeycode è sempre =0 pur avendo settato la proprietà Keypreview=True

allora ho pensato di settare nella form load la variabile intkeycode=9
solo che giustamente il "TAB" funziona perchè ho forzato la variabile ma quando io invece di utilizzare il "TAB" utilizzo per spostarmi da una textbox all'altra con il mouse mi genera l'errore riferito nell'evento validating perchè appunto la variabile è settata in maniera fissa

Spero di essermi fatto un pò capire...

Ciao
Fabio
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

sanbiz Profilo | Senior Member

>Ragazzi ho una form con tre textbox che eseguono del codice nell'evento
>Validating e successivamente se e.cancel=False esegue del codice
>nell'evento Validated...
>Comunque la mi adomanda è la seguente: io vorrei che quando il
>cursore si trova in un delle textbox e premo il pulsante "TAB",
>mi deve eseguire il codice altrimenti se io mi sposto in un'altra
>textbox con il click del mouse senza utilizzare il "TAB", il
>codice della prima etxtbox non deve essere eseguito

Tempo fa ho scritto un post che parlava della funzione GetAsyncKeyState (http://blogs.dotnethell.it/sandro/Post_3052.aspx)
Io metterei nell'evento validating la chiamata alla funzione GetAsyncKeyState e lì verificherei l'avvenuta pressione del tasto tab.

Es.
Private Declare Function GetAsyncKeyState Lib "user32" Alias "GetAsyncKeyState" (ByVal vKey As Keys) As Short

Private Sub TextBox_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs)
If GetAsyncKeyState(Keys.Tab) < 0 Then
MsgBox("Ho premuto il tab")
Else
MsgBox("Non ho premuto il tab")
End If
End Sub

--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

trinity Profilo | Guru

non c'è un'altra soluzione?

domanda ho provato l'api che mi hai consigliato e nell'evnto validating il debug si attiva solo se premo il pulsante Tab e come valore GetAsyncKeyState(Keys.Tab) è uguale a -32767 è giusto e come mai esce questo valore quando il keycode del tab è uguale a 9?

Comunque visto che il tuo blog è molto interessante, potrei inserire il link nel mio blog alla voce blog dei miei amici?

Ciao e grazie mille

Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/

sanbiz Profilo | Senior Member

>domanda ho provato l'api che mi hai consigliato e nell'evnto
>validating il debug si attiva solo se premo il pulsante Tab e
>come valore GetAsyncKeyState(Keys.Tab) è uguale a -32767 è giusto
E' giusto, perchè l'api ti restituisce il valore -32767 solo se il tasto passato è premuto.
Se tu fai una if sul valore restituito verificando se è <0, allora saprai se il tasto è in quel momento premuto o no.

>e come mai esce questo valore quando il keycode del tab è uguale
>a 9?
Perchè l'api restituisce 0 se non hai premuto il tasto su cui fai la richiesta e -32767 se lo hai premuto.

>Comunque visto che il tuo blog è molto interessante, potrei inserire
>il link nel mio blog alla voce blog dei miei amici?
Volentieri, lusingato.
--
Sandro Bizioli
http://blogs.dotnethell.it/sandro/

trinity Profilo | Guru

Grazie mille

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5