2011-01-04 1 views
11

ich dachte, ich von mir selbst dieses Problem gelöst, aber es kam zurück, um meine Anwendung zu verfolgen, so geht es hier:kann nicht Strg + Key Verknüpfung auf keydown Ereignisse erkennen, wann immer es gibt eine Nur-Lese-Textbox mit Fokus

ich habe die folgend keydown Event-Handler in einer Form mit einem Paar von behinderten und nur-Lese-Textbox registriert und sie sind nur einfache Verknüpfungen für die Tasten:

private void AccountViewForm_KeyDown(object sender, KeyEventArgs e) 
    { 
     //e.SuppressKeyPress = true; 
     //e.Handled = true; 
     if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.E && !isInEditMode) 
      btnEditMode_Click(sender, e); 
     if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.S && isInEditMode) btnEditMode_Click(sender, e); 
     if (e.KeyCode == Keys.Escape) btnCancel_Click(sender, e); 
     if (Control.ModifierKeys == Keys.Control && e.KeyCode == Keys.W) Close(); 
    } 

die Form zu wahren KeyPreview gesetzt hat, aber immer dann, wenn eine nur-Lese-Textbox des Fokus besitzt und i drücken Strg + E Ich kann "Control.ModifierKeys == Keys.Control" und "e.KeyCode == Keys.E" nicht gleichzeitig als "wahr" angeben. Was wirklich seltsam ist, ist, dass Strg + W funktioniert. Irgendjemand hat eine Idee, was zum Teufel ist los? :(

+0

Ich weiß, das ist alt. Ihr Code verweist auf "Control.ModifierKeys". Es sollte wohl "e.Modifiers" sein. – Metro

Antwort

18

Nach this question und this one, es wie eine allgemeinere Art und Weise sieht Tastenkombinationen zu handhaben ist, die ProcessCmdKey() -Methode außer Kraft zu setzen:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == (Keys.Control | Keys.F)) { 
    MessageBox.Show("What the Ctrl+F?"); 
    return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

Haben Sie darüber nachgedacht mit Alt + E und Alt + S und nur die Mnemonic-Eigenschaft für Ihre Tasten? Das scheint für mich gut zu funktionieren, und es ist einfacher zu installieren.

+0

Nun, das ist ein besserer Weg, damit umzugehen, kein seltsames Verhalten mehr. Danke – francis

+0

Dies kann auch getan werden, wenn die DefWndProc-Funktion überschrieben wird. if (Control.ModifierKeys == (Keys.Control | Keys.F)) { // Was auch immer } – David

Verwandte Themen