VBnet KeyPress in form non mi va

di il
16 risposte

VBnet KeyPress in form non mi va

Ciao

In un semplice form questo codice che ho trovato/provato non mi da segni di vita... sia con KeyPress che KeyDown.

Semplicemente vorrei che ad alcuni fasti ESC o F1-F2... evidentemente nel programma "attivo", eseguano qualcosa...
    
    Private Sub FrmTest_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Me.KeyPress

        If e.KeyChar = Keys.Escape Then
            MsgBox("You pressed ESC")
        End If

    End Sub
Cosa sbaglio per usarlo nel form "generale"?

DOMANDA in aggiunta:
Sarebbe possibile fare in modo che se premo ad esempio F1 non solo nel/dal programma in uso ma da "qualsiasi parte del PC" (quando uso altri programmi) anche senza priorità nel mio soft, venga comunque eseguito un codice specifico, oppure devo sempre essere "attivo" nel soft col keypress?

Ad esempio per intercettare "da qualsiasi parte" quando premo ad esempio F1 della tastiera?

Grazie
Ciao

16 Risposte

  • Re: VBnet KeyPress in form non mi va

    Ah....

    per la prima.... avevo KeyPreview su FALSE e ho usato KeyDown con
        Private Sub FrmProva_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
            If e.KeyCode = Keys.Escape Then
                MsgBox("You pressed ESC")
            End If
        End Sub
    
    Vada per la seconda.... domanda in aggiunta...
  • Re: VBnet KeyPress in form non mi va

    Non è molto pratico perché qualsiasi applicazione potrebbe usare il tasto per propri scopi, quindi può avere la precedenza l'applicazione che ha il focus.

    Inoltre dovresti scrivere un hook di tastiera ma non ne vale la pena
  • Re: VBnet KeyPress in form non mi va

    Qui trovi un hook già fatto (da microsoft) che intercetta qualsiasi carattere scritto sulla tastiera https://docs.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c
  • Re: VBnet KeyPress in form non mi va

    Provando anche i vari comandi e sostituito il "IF THEN" con un CASE che mi fa più semplice ma
    
     Private Sub FrmCAT_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
            Select Case e.KeyCode
                Case Keys.Escape
                    ' esegue codice per tasto ESC
    
                Case Keys.F1
                    'esegue codice per tasto F1
                    
                Case ????    ' per CTRL + F1
                ' non riesco a trovare il codice giusto per CTRL+F1
             
             End Select
    
    ma come devo inserire nel KeyDown un doppio tasto come CTRL+F1?

    Ho fatto un po' di prove usando e.control o keys.control and Keys.F1 e altre combinazioni ma mi parte sempre il F1

    grazie per un possibile aiuto
  • Re: VBnet KeyPress in form non mi va

    gian82 ha scritto:


    Qui trovi un hook già fatto (da microsoft) che intercetta qualsiasi carattere scritto sulla tastiera https://docs.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c
    Grazie Gian82, purtroppo mi pare sia tutto in "C"... per me arabo... vado sempre limitato in VBnet basic...
  • Re: VBnet KeyPress in form non mi va

    AntoAnto ha scritto:


    ...
    ma come devo inserire nel KeyDown un doppio tasto come CTRL+F1?

    Ho fatto un po' di prove usando e.control o keys.control and Keys.F1 e altre combinazioni ma mi parte sempre il F1
    Metti una [CODE]If e.Control Then ... dentro il Case
  • Re: VBnet KeyPress in form non mi va

    Metti una [CODE]If e.Control Then ...
    nel CASE o tolgo il case?

    Non ho capito come usarlo/inserirlo agli altri ora nel CASE...

    vedo che nel mio select con un

    CASE e.control

    oppure

    CASE Keys.ControlKey

    lo vede sto CTRL e ci passa ma non riesco ad abbinarlo assieme al F1... mi vede sempre solo F1...
  • Re: VBnet KeyPress in form non mi va

    Così:
    Private Sub FrmCAT_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
            Select Case e.KeyCode
                Case Keys.Escape
                    ' esegue codice per tasto ESC
    
                Case Keys.F1
                    If e.Control Then
                        'Esegue il codice per CTRL+F1
                    Else
                        'Esegue il codice per F1
                    End If
            End Select
        End Sub
    Altrimenti puoi sviluppare due Select Case diversi
        Private Sub FrmCAT_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
            If e.Control Then
                Select Case e.KeyCode
                    Case Keys.Escape
                    ' esegue codice per tasto CTRL+ESC
    
                    Case Keys.F1
                        'Esegue il codice per CTRL+F1
                End Select
            Else
                Select Case e.KeyCode
                    Case Keys.Escape
                    ' esegue codice per tasto ESC
    
                    Case Keys.F1
                        'Esegue il codice per F1
                End Select
            End If
        End Sub
    
  • Re: VBnet KeyPress in form non mi va

    Usa questo per convertire il codice da c# a vb.net https://converter.telerik.com
  • Re: VBnet KeyPress in form non mi va

    Grazie per la dritta.... urka ma è "complicatissimo".... dopo svariati tentativi
    ho pensato di sostituire col KeyData

    Quindi ho risolto in modo semplice con un singolo case direttamente nel Form per il keydown
    sempre col un singolo case semplice ma sostituendo il SELECT con e.keydata così
        Select Case e.KeyData
            Case keys.F1
                    'codice F1
            Case (Keys.F1 + Keys.Control)
                    'codice CTRL+F1
        End Select
    è molto molto più semplice e mi sembra che funziona perfettamente sia con che senza CTRL,... qualche controindicazione?
  • Re: VBnet KeyPress in form non mi va

    Non credo... Io ho sempre usato l'altro metodo, quindi non saprei darti una risposta certa.Fai vari test, anche distinguendo con il tasto CTRL di sinistra o di destra e assicurati che il comportamento sia quello che ti aspetti
  • Re: VBnet KeyPress in form non mi va

    Sisi funziona perfettamente sia da CTRL destro che sinistro... non perde un F1 o CTRL+F1
    molto semplice e diretto...
    Lo uso nel KeyDown del form,
    non so se funzionerà nel keypress e quale sia meglio DOWN o PRESS...
  • Re: VBnet KeyPress in form non mi va

    Non sò quale sia lo scopo del tuo progrtto, ma nel tuo caso consiglierei il linguaggio AHK, AutoHotkey è un linguaggio di scripting che consente la creazione di macro e script, in genere attivati ??tramite hotkey, 'sò che non centra nulla nell'area in cui ci troviamo, mah ... in acuni casi vb è limitato, o il raggiungimento dello scopo in un progetto diventa mooolto complicato. Un Ahk code si può implementare benissimo come blocco esterno in un progetto vb, raggiungendo gli stessi o migliori risultati con sforzi minori...va beh una buona giornata a tutti.
  • Re: VBnet KeyPress in form non mi va

    Per evitare eventuali, fortuite ed indesiderate esecuzioni multiple conviene sfruttare l'evento 'KeyUp'.
Devi accedere o registrarti per scrivere nel forum
16 risposte