none
Intercettare pressione tasto RRS feed

  • Domanda

  • Salve a tutti allora, io vorrei che appena premo il tasto E appaia un messagebox con scritto "Tasto Premuto" pero non mi funziona.

    Io ho ripreso a programmare ora ed è 3 o 4 mesi che non avvicino al c# o qualche altro linguaggio, il codice che ho messo è questo.

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
          if (e.KeyCode == Keys.E)
            MessageBox.Show("Tasto premuto");
        }
      }
    }
    

    Grazie in anticipo

    martedì 9 agosto 2011 11:41

Risposte

Tutte le risposte

  • Andrea1980345 wrote:

    Salve a tutti allora, io vorrei che appena premo il tasto E appaia un messagebox con scritto "Tasto Premuto" pero non mi funziona.
    Io ho ripreso a programmare ora ed è 3 o 4 mesi che non avvicino al c# o qualche altro linguaggio, il codice che ho messo è questo.


    private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.E) MessageBox.Show("Tasto premuto"); } } }

    Grazie in anticipo

    Hai dei controlli sulla form?
    Se il focus è altrove, ovviamente il keydown non arriva alla form.

    Per catturare a livello di form la key vorrai fare l'override di ProcessCmdKey:
    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
    // ...
    return base.ProcessCmdKey(ref msg, keyData);
    }

    vedi msdn per i dettagli


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    martedì 9 agosto 2011 12:05
  • Non ho capito molto bene cosa mi ha detto, potrebbe spiegarmelo meglio? Grazie
    martedì 9 agosto 2011 12:36
  • Ciao Andrea1980345,

    Salve a tutti allora, io vorrei che appena premo il tasto E appaia un messagebox con scritto "Tasto Premuto" pero non mi funziona.

    Io ho ripreso a programmare ora ed è 3 o 4 mesi che non avvicino al c# o qualche altro linguaggio, il codice che ho messo è questo.

     

     private void Form1_KeyDown(object sender, KeyEventArgs e)
     {
      if (e.KeyCode == Keys.E)
      MessageBox.Show("Tasto premuto");
     }
     }
    }
    

    Grazie in anticipo

     


    chiedo scusa se mi intrometto , volevo solamente aggiungere se hai anche provato ad impostare a true la propietà KeyPreview del form.

     

    Ciao


    Carmelo La Monica  http://community.visual-basic.it/carmelolamonica/
    martedì 9 agosto 2011 12:40
  • Andrea1980345 wrote:

    Non ho capito molto bene cosa mi ha detto, potrebbe spiegarmelo meglio? Grazie

    facciamo la versione semplice.

    Aggiungi nel codice della form questo codice:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
    MessageBox.Show("Tasto premuto");
    return base.ProcessCmdKey(ref msg, keyData);
    }

    su msdn è ben spiegato il significato di msg e keydata
     P.S. qui sui forum ci diamo tutti del tu :)


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    martedì 9 agosto 2011 12:42
  • Ciao Carmelo La Monica, alla tua domanda rispondo dicendo che avevo provato sia su true che su false ma non funzionava.

    Ciao Raffaele Rialdi, come dici tu funziona perfettamente, però vorrei capire il perche prima non funzionava e adesso con questo codice si. Cioè il codice che mi hai dato a che servirebbe?

    Grazie in anticipo

    P.S. Dimenticato di dirti grazie per la risposta :)

    martedì 9 agosto 2011 18:15
  • Andrea1980345 wrote:

    Ciao Raffaele Rialdi, come dici tu funziona perfettamente, però vorrei capire il perche prima non funzionava e adesso con questo codice si. Cioè il codice che mi hai dato a che servirebbe?

    Grazie in anticipo

    Per capirlo devi approfondire su un libro/articolo come funziona la message pump di windows.
    Gli eventi di tastiera, mouse e tante altre cose che arrivano all'applicazione, sono posti in una coda della tua applicazione che li rende sequenziali. I messaggi vengono inviati ai controlli che sono attivi in quel momento, diversamente sarebbero molti di più e rischieresti di processarli due volte oltre a rallentare il processo.

    Quella override non fa altro che intercettare i messaggi nella coda prima che questi siano processati. In pratica li prendi sul nascere.

    La spiegazione è molto rozza ma in poche righe non saprei come fare...
     >

    P.S. Dimenticato di dirti grazie per la risposta :)

    Prego :)


    Raffaele Rialdi  http://www.iamraf.net
    Weblog: http://blogs.ugidotnet.org/raffaele
    Microsoft MVP profile https://mvp.support.microsoft.com/profile/raffaele
    UGIdotNET - http://www.ugidotnet.org/


    Raffaele Rialdi [MVP] My articles and videos: http://www.iamraf.net Italian blog: http://blogs.ugidotnet.org/raffaele
    • Contrassegnato come risposta Andrea1980345 martedì 9 agosto 2011 18:45
    • Contrassegno come risposta annullato Andrea1980345 martedì 9 agosto 2011 18:45
    martedì 9 agosto 2011 18:34
  • Piu o meno ho capito grazie! :)
    martedì 9 agosto 2011 18:42