Bookmark and Share
 VB.NET: disabilitare beep di sistema sul KeyDown del tasto Invio

Programmazione lunedì 22 settembre 2008 alle 23:48
Return (red circle) and Enter (green circle) b...

Image via Wikipedia

Vi 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!

;-)

Bookmark and Share

Commenti a “VB.NET: disabilitare beep di sistema sul KeyDown del tasto Invio”

  • 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?

Lascia un commento

Ti ricordo che è sempre necessario trascrivere le due parole che leggi nel box rosso. È una misura antispam.