Tasto tab dx e sx

di apteryx il
6 risposte

Salve a tutti, devo intercettare la pressione del tasto che si trova a sinistra del tasto lettera Q che presenta due freccine una verso sx e una verso dx, ho provato anche con il seguente codice:

MsgBox("tasto: " & e.KeyCode, MsgBoxStyle.OkOnly)

ma niente , mi restituisce il valore di tutti i tasti tranne questo, che serve per spostarsi da un campo a quello successivo o indietro e quindi dovrebbe essere il tasto tab ma neanche come Keys.tab riesco ad intercettarlo. Qualcuno mi può dire che e.keycode è?

Grazie in anticipo

6 Risposte

  • If e.KeyCode = Keys.Tab Then

            MsgBox("TAB")

        End If

    Su keypress, keydown e similari

  • Il tasto TAB viene intercettato dall'ambiente (sistema operativo o framework). Devi usare altro per intercettare quel tasto.

    Purtroppo non sò aiutarti in VB.

    @sihsandrea

    Hai provato quel codice ? Negli ambienti che uso io che non sono .NET (sia in WIndows che in Linux) l'evento keypress, keydown, keyup non intercettano il tatso TAB.

    E' necessario usare un api di Windows diretta.di più alto livello, oppure qualche altra funzione messa a disposizione dall'ambiente di sviluppo).

    Nel mio ambiente (Delphi) si usa intercettare il messaggio CM_ISSHORTCUT.

  • 16/05/2026 - Delphinium ha scritto:

    Il tasto TAB viene intercettato dall'ambiente (sistema operativo o framework). Devi usare altro per intercettare quel tasto.

    Purtroppo non sò aiutarti in VB.

    @sihsandrea

    Hai provato quel codice ? Negli ambienti che uso io che non sono .NET (sia in WIndows che in Linux) l'evento keypress, keydown, keyup non intercettano il tatso TAB.

    E' necessario usare un api di Windows diretta.di più alto livello, oppure qualche altra funzione messa a disposizione dall'ambiente di sviluppo).

    Nel mio ambiente (Delphi) si usa intercettare il messaggio CM_ISSHORTCUT.

    Io uso Delphi ma non mi interessa intercettare tab. Poiché Tab sposta da un oggetto al successivo, o setto i tab order o intercetto in exit.

    Ho letto che in VB quello è il modo per sapere se stai premendo Tab ma bisogna anche intercettare le keypreview nel form load.

    Private Sub Form1_Load(...) Handles MyBase.Load
        Me.KeyPreview = True
    End Sub

    Pare che il valore numerico del Tab sia 9

    Per Tab indietro bisogna controllare lo shift 

    Considerando a cosa serve il tab basta andare a controllare cosa impedire lasciando il mondo come si trova. Se intercetti alt + Tab rischi di non passare da un task all'altro.

    Usa on exit on enter o similari per alt+Tab on Hide ecc...

  • Grazie a tutti, per Sihsandrea, ho provato il codice e funziona con tutti tranne quello che SEMBRA essere ll tasto tab, ma anche il codice da te proposto non funziona, anche il valore 9 non viene intercettato. Pazienza cambierò la mia sub e farò reagire il codice solo con il tasto enter. Grazie cmq.

  • Chiarisci bene il contesto. Stai usando un form in VB.NET con textcox e altri controlli presenti? Cosa devi fare esattamente con il Tab (che normalmente sposta il focus tra i controlli)?

    Comunque. dai un'occhiata a questo

    Public Class Form1
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            Me.KeyPreview = True
        End Sub
    
        Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
            If keyData = (Keys.Shift Or Keys.Tab) Then
                MessageBox.Show("Shift+Tab")
                Return True
            End If
    
            If keyData = Keys.Tab Then
                MessageBox.Show("Tab")
                Return True
            End If
    
            Return MyBase.ProcessCmdKey(msg, keyData)
        End Function
    End Class
  • 16/05/2026 - apteryx ha scritto:

    Grazie a tutti, per Sihsandrea, ho provato il codice e funziona con tutti tranne quello che SEMBRA essere ll tasto tab, ma anche il codice da te proposto non funziona, anche il valore 9 non viene intercettato. Pazienza cambierò la mia sub e farò reagire il codice solo con il tasto enter. Grazie cmq.

    Io avevo dato una traccia....

    Tuttavia, un consiglio mi sento di dartelo.

    NON intervenire mai sui tasti o combinazione di tasti del s.o..

    Se sei su una dbgrid senza blocchi in edit, crtl+canc elimina il record. Piuttosto che intercettare la combinazione dei tasti, considerando la programmazione ad oggetti, intervieni sul delete record a prescindere se l'utente ha fatto ctrl+canc.

    Veniamo al tab: usare il Tab per scrivere codice che intercetta il suo intervento (spostare il focus) serve quanto il due di spade con la briscola a denari in una mano a coppe...

    L'utente può spostarsi tanto col tab quanto col mouse ma intercettare anche il mouse vale come sopra se si dispone di schermo touch.

    Allora che fai? Scrivi n' volte qualcosa che deve intervenire se esiste la condizione all'uscita del controllo? Meglio intervenire su exit a prescindere da come l'utente si sposta tra i controlli.

Devi accedere o registrarti per scrivere nel forum
6 risposte