VB.NET: disabilitare beep di sistema sul KeyDown del tasto Invio
Programmazione lunedì 22 settembre 2008 alle 23:48Vi capiterà certamente di creare applicativi con Visual Studio che richiedono il minor uso del mouse possibile e che vi permettano così, attraverso il solo utilizzo della tastiera, di passare da un campo all’altro, sia in avanti che all’indietro. Intercettare la pressione dei tasti è cosa molto semplice grazie agli eventi KeyPress, KeyDown e KeyUp (fortunatamente nulla è cambiato dalla vecchia versione VB6).
Il problema che però potreste incontrare è quello di sentire un “beep” (che beep non è visto che è il segnale di errore) alla pressione del tasto Invio (Enter) all’interno di una TextBox. Per ora mi è capitato solo su una TextBox e non su altri elementi dei Form (come per esempio sui ComboBox).
La “funzione” su cui sto operando, permette di proseguire tra i campi alla pressione del tasto Invio e tornare indietro alla pressione del tasto Esc (Escape). Ecco il codice:
Private Sub textBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox.KeyDown
If e.KeyValue > 0 Then
e.Handled = True
FuncKeysModule(e.KeyCode)
End If
End Sub
Public Sub FuncKeysModule(ByVal value As Keys)
Select Case value
Case Int(Keys.Enter)
Me.ProcessTabKey(True)
Case Int(Keys.Escape)
Me.ProcessTabKey(False)
End Select
End Sub
Avrei potuto fare questa funzione in almeno altri due modi, tra cui quello che utilizza il metodo GetNextControl dei Form, ma emulare la pressione del tasto di tabulazione (Tab) mi sembrava la scelta più ovvia, così da essere preciso anche in creazione del Form.
Come dicevo, però, la pressione del tasto Invio genera quel fastidioso “beep”: lo snippet che segue mostra come modificare il codice della textBox per evitarlo.
Private Sub textBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles textBox.KeyDown
If e.KeyValue > 0 Then
e.Handled = True
FuncKeysModule(e.KeyCode)
If e.KeyCode = Keys.Enter Then e.SuppressKeyPress = True
End If
End Sub
A saperlo subito, non avreste perso tutto questo tempo!
1 ottobre 2009 alle 17:43
Ciao senti sto facendo un programma in vb, ho un textbox dove voglio far scrivere solo numeri e ho usato il keyup però ora sorge un problema,nn posso mettere numeri decimali….C’è una soluzione?