2010-03-19 7 views

risposta

9

Impostare la proprietà UseMnemonic del pulsante su true e aggiungere una e commerciale (&) poco prima della lettera nella proprietà Text del pulsante si voglio usare per il tasto di scelta rapida.

L'utente dovrebbe premere Alt + per attivare il tasto di scelta rapida.

15

Override del modulo ProcessCmdKey. Se trovi una sequenza di tasti che ti piace, chiama lo stesso metodo utilizzato dal pulsante.

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    if (keyData == (Keys.Control | Keys.X)) 
    { 
     DoSomething(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    DoSomething(); 
} 

private void DoSomething() 
{ 
    MessageBox.Show("hi!"); 
} 

EDIT: il metodo di Jay è meglio se si può trovare un mnemonico appropriato.

0

penso che questo è ciò che si vuole:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Enter) 
     { 
      //Do whatever you want here... 
     } 
    } 

Naturalmente è possibile modificare Keys.Enter a qualsiasi chiave che si desidera.

1

Inoltre, ci sono le proprietà AcceptButton e CancelButton in ogni forma. Se si intende restringere l'utilizzo dei tasti di scelta rapida per accedere ai pulsanti di escape, che a loro volta devono richiamare determinati pulsanti, si consiglia di considerare l'utilizzo di queste proprietà.

6

Windows Applicazione e tasto di scelta rapida sono sinonimi. Le persone preferiscono utilizzare i tasti di scelta rapida per attività più veloci. Supponi di essere in una casella di testo e vuoi premere F5 per ricaricare il modulo. Non vuoi spostare il cursore del mouse. Quindi, quello che farai è che aggiungerai l'evento "Key Down" alla casella di testo. Ma, se ti trovi in ​​una casella di testo diversa o in un pulsante, non funzionerà. Quindi, aggiungerai l'evento "Key Down" al tuo modulo.

Ma è necessario abilitare una proprietà affinché funzioni correttamente e questo è il trucco.

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.F5) 
    { 
     btnRefresh_Click(null, null); 
    } 
} 

Ma d'oro trucco è, nella finestra delle proprietà del modulo apportare le seguenti modifiche:

KeyPreview = True 

Godetevi programmazione.

-1

anche se questo post è super vecchio qui è un modo più semplice per farlo, il codice è piuttosto scarso ma ottiene il lavoro molto bene.

 private void Form1_KeyDown(object sender, KeyEventArgs e) 
     { 
     if (e.KeyCode == Keys.Enter) 
     { 

      button1.PerformClick(); 

     } 
+0

Non credo che ottiene il lavoro fatto, perché questo non si compila . –

0
this.KeyDown += new KeyEventHandler(Form1_KeyDown); 

void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
if (e.Alt && e.KeyCode == Keys.W) 
    { 
    //do something 
    } 
} 
0

Sulla base di risposta di Micheal Ecco una versione più elegante se non utilizzerà chiavi combinate:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
{ 
    switch(keyData) 
    { 
     case Keys.F2: 
      // do something... 
      return true; 
     case Keys.F3: 
      // do something... 
      return true; 
     case Keys.F4: 
      // do something... 
      return true; 
     default: 
      return base.ProcessCmdKey(ref msg, keyData); 
    }    
}