Logo

LA GESTIONE DELLA TASTIERA IN C#


In questo articolo vedremo come utilizzare alcuni eventi riguardanti i tasti della tastiera per ottenere informazioni su quando si preme un tasto e a quale tasto corrisponde.
Esistono 4 differenti eventi
  • KeyDown
  • KeyPressed
  • KeyUp
  • PreviewKeyDown
I primi 3 vengono generati quando si preme un tasto mentre il controllo dispone dello stato attivo.
PreviewKeyDown si verifica prima che scatti l'evento KeyDown , quando viene premuto un tasto mentre è attivo il controllo.

Gli eventi relativi alla pressione dei tasti si verificano nel seguente ordine: KeyDown, KeyPressed, KeyUp.
Per capire quale tasto viene premuto è possibile utilizzare e.KeyCode, e.KeyValue e e.KeyData che funzionano per PreviewKeyDown, KeyDown e KeyUp ma non per KeyPressed . Vediamo un esempio:
        private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.F:
                {
                    // Premuto il tasto F
                    break;
                }
                case Keys.D:
                {
                    // Premuto il tasto D
                    break;
                }
            }
        }
E' anche possibile capire se vengono premuti i tasti [SHIFT], [ALT], e [CTRL] attraverso e.Shift, e.Control ed e.Alt . Questo lo si può fare solo all'interno degli eventi PreviewKeyDown, KeyDown e KeyUp .
private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (e.Alt)
    {
        //e.Alt mi restituisce un valore booleano che indica se il tasto Alt è premuto
    }
}
Possiamo ottenere la stessa cosa e anche al di fuori di questi 3 eventi, tramite My.Computer.Keyboard.ShiftKeyDown, My.Computer.Keyboard.ControlKeyDown e My.Computer.Keyboard.AltKeyDown.

Stessa cosa per Caps Lock, Scroll Lock e Num Lock utilizzando My.Computer.Keyboard.CapsLock, My.Computer.Keyboard.ScrollLock e My.Computer.Keyboard.NumLock . Il valore booleano restituito, ci informa se i suddetti tasti sono abilitati.

e.KeyChar viene utilizzato all'interno dell'evento KeyPressed e ci ritorna esattamente quello che viene premuto. Quindi se premiamo il tasto [A] ci ritornerà "a" ma se premiamo contemporaneamente [SHIFT]+[A] il valore restituito sarà "A".

private void Form1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
    password += e.KeyChar;
    //I caratteri premuti vengono memorizzati in una variabile password di tipo stringa
}
Possiamo anche simulare la pressione di uno o più tasti attraverso la funzione My.Computer.Keyboard.SendKeys.
My.Computer.Keyboard.SendKeys("F");
'Viene simulata la pressione del tasto [F]
My.Computer.Keyboard.SendKeys("Fdonet.com")
'Viene simulata la pressione dei tasti [SHIFT]+[F],[D],[O],[N],[E],[T],[.],[C],[O],[M]


Fonte web: https://www.fdonet.com/programmazione/csharp/la-gestione-della-tastiera-in-c-sharp.aspx