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