2017-02-15 4 views
2

Mit C#, in einem Win-Formular, was ist die einfachste Möglichkeit, einen Tastendruck (Ctrl-Shift-Z) in einer RichTextBox herauszufiltern (oder neu zuordnen)? Ich kenne verschiedene Tastatur-Hook-Projekte in CodeProject, aber sie beinhalten ganze Klassen. Ich möchte die einfachste mögliche Methode verwenden, z. B. eine Funktion überschreiben. Der Grund: richTextBox scheint Ctrl-Shift-Z wie Strg-Z zu behandeln, also als Undo. Ich würde lieber Ctrl-Shift-Z als Redo verwenden. Ich habe versucht, die "KeyDown" -Methode, aber es scheint nicht den Tastendruck erfassen, Tastenanschläge scheinen niedriger als das behandelt werden.C# RichTextBox herausfiltern oder neu zuordnen

private void richTextBox_KeyDown(object sender, KeyEventArgs e) { 
    if (e.KeyCode == Keys.Z && Control.ModifierKeys == Keys.Shift && Control.ModifierKeys == Keys.Control) { 
     richTextBox.Redo(); 
    } 
} 
+0

WinForms oder WPF? –

+0

WinForm (Ich bearbeite das Original) – MrSparkly

+0

Ich möchte keine Tastenkürzel deaktivieren, ich möchte nur Strg-Shift-Z wie Ctrl-Y (Redo) arbeiten. – MrSparkly

Antwort

2

Etwas wie:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == (Keys.Control | Keys.Shift | Keys.Z)) { 
    richTextBox.Redo(); 
    return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 

Wie Hans Passant sagte in seiner Antwort, sollten Sie auch darauf achten, überprüfen Sie die KeyPreview Eigenschaft auf True die Form haben.

+0

Perfekt. Genau das, was ich wollte. – MrSparkly

+0

Gut zu helfen. Glückliche Kodierung! – Ethilium

1

In Ihren Eltern Formulars die KeyPreview Eigenschaft auf true und dann für die gewünschte Verknüpfung Blick in dem KeyDown-Ereignisse des Formulars.

public partial class MyForm : Form 
{ 
    public MyForm() 
    { 
     InitializeComponent(); 
     this.KeyPreview = true; 
     this.KeyDown += MyForm_KeyDown; 
    } 

    private void MyForm_KeyDown(object sender, KeyEventArgs e) 
    { 
     if ((e.Modifiers & Keys.Shift) != 0 && 
      (e.Modifiers & Keys.Control) != 0 && 
      (e.KeyCode == Keys.Z)) 
     { 
      e.Handled = true; 
      richTextBox1.Redo(); 
     } 
    } 
}