C#richTextBox过滤掉​​或重新映射一个击键

时间:2017-02-15 20:51:19

标签: c# winforms richtextbox

在Win形式中使用C#,在richTextBox中过滤掉(或重新映射)击键(Ctrl-Shift-Z)的最简单方法是什么?我知道CodeProject上的各种键盘钩项目,但它们涉及整个类。我想使用最简单的方法,例如一个函数覆盖。原因:richTextBox似乎将Ctrl-Shift-Z视为与Ctrl-Z相同的方式,即撤消。我更喜欢使用Ctrl-Shift-Z作为重做。我尝试了“KeyDown”方法,但它似乎没有捕获按键,按键似乎处理得比这更低。

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

2 个答案:

答案 0 :(得分:2)

类似的东西:

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);
}

正如Hans Passant在他的回答中所说的那样,您还应该检查以确保您将表单的KeyPreview属性设置为True。

答案 1 :(得分:1)

在父窗体中,将KeyPreview属性设置为true,然后在Form的KeyDown事件中查找所需的快捷方式。

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();
        }
    }
}