Vb.net - intercettare pressione tasto all'interno del form

martedì 05 agosto 2014 - 23.01

perla0279 Profilo | Senior Member

Ciao
nella mia applicazione vorrei intercettare la pressione di alcuni tasti all'interno del form.
Vorrei controllare l'uscita dal form in caso di presione tasto ESC oppure il posizionarsi nel pulsante OK in caso di pressione del tasto ENTER.
inoltre volevo anche controllare ( sempre all'interno dello stesso controllo) se uno preme un tasto F2 all'interno di un determinato combobox venga aperto il Form2

Ho provato scrivendo :
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma non funziona, non scatta mai l'evento. E' possibile controllare la pressione dei tasti enza dover controllare ogni singolo combobox?

Grazie

alextyx Profilo | Expert

Mi pare esista una proprietà del Form che si chiama KeyPreview o qualcosa del genere. Mettila a True e vedrai che l'evento dovrebbe scattare

perla0279 Profilo | Senior Member

in effetti così funziona con quai tutti i tati.
Con il TAB non funziona. C'è modo i abilitarlo?

alextyx Profilo | Expert

Non tutti i tasti scatenano un certo evento. Può darsi che tu debba intercettarlo nella routine di gestione di un diverso evento legato alla pressione di un tasto. Ce n'è più di uno (KeyDown, KeyUp....) e probabilmente il Tab scatenerà uno di questi, però non ricordo. Guarda se ti scappa fuori qualcosa con google relativamente a una ricerca che potrebbe essere " vb.net eventi tasto tab" o simili.

gigi78 Profilo | Newbie

al posto di usare le costanti vb prova ad usare i codici ascii ( la tabella la trovi ovunque in rete) in questo esempio se premi il tasto tab il form si chiude
Public Class Form1

Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress


Select Case e.KeyChar
Case Chr(9)
Me.Close()

End Select

End Sub


End Class

alextyx Profilo | Expert

@ Gigi
Se fai caso al codice che non funzionava e lo paragoni col tuo, vedrai che vi riferite ad eventi diversi (KeyDown e KeyPress). Il tasto Tab, come suggerivo, non scatena l'evento KeyDown e nemmeno il KeyUp, mi pare. La differenza è tutta lì, non nell'uso delle costanti che sono solo utilità mnemoniche.

gigi78 Profilo | Newbie

ciao alex ho provato con l'evento keydown e funziona

Public Class Form1

Private Sub Form1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown

Select Case e.KeyCode
Case 9

Me.Close()

End Select

End Sub

End Class

molto probabilmente non ho capito bene il problema ... se è così chiedo scusa per aver creato confusione ... :-)

alextyx Profilo | Expert

Mi 'pareva', ma non ero certo che il KeyUp non fosse generato. Mi sbagliavo:

Public Class Form1

Private Sub Form1_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown

End Sub

Private Sub Form1_KeyUp(sender As Object, e As KeyEventArgs) Handles Me.KeyUp
If e.KeyCode = Keys.Tab Then
MessageBox.Show("Intercettato")
End If

End Sub

Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress

End Sub
End Class

Con VB2012 e WIN7 Home Premium, l'unico modo che ho di intercettare il tab che si sposta sui controlli di un form (ho messo 2 textbox), con la proprietà keypreview=true, è di farlo nell'evento keyup, ovviamente si può fare utilizzando le costanti dell'enumerazione. Gli altri due eventi a me non scattano proprio. Non so dirti come mai a te funzionano. Nè saprei dirti come mai a te non funziona l'uso dell'enumerazione dei tasti. Son misteri.... :)
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5