2

我需要 RichTextEdit 控件中制表键的自定义行为。

目前我拥有的最好的是:

editBox.PreviewKeyDown += new System.Windows.Forms.PreviewKeyDownEventHandler(this.field_PreviewKeyPress);


  private void field_PreviewKeyPress(object sender, PreviewKeyDownEventArgs e)
        {
            switch (e.KeyCode)
            {
                case Keys.Tab: 
                     //Some code here
                break;
            }
        }

tab 键注册得很好,但之后控件无论如何都会处理该键并将焦点移动到下一个控件。似乎没有办法消费这个关键事件。

4

3 回答 3

1

也许这篇 CodeProject 文章可以给你一些提示:

TabKeyIntercept - 拦截并处理 Windows.Forms 表单中的 Tab 键

[...] 幸运的是,在 Form 基类中,存在该protected override bool ProcessTabKey(bool forward) 方法。使用这种方法,我们可以拦截并“使用” Tab 键。

而且,事实证明,如果 ProcessTabKey()方法的返回值为 false,Tab 键确实会进入 OnKeyDown() 方法。但是,当然,如果您的代码“使用”方法中的 Tab 键ProcessTabKey(),您可能不需要在OnKeyDown()方法中处理它。

此外,Control-Tab 组合使其成为OnKeyDown()方法。

所以,知道了这些,我们准备为 Tab 键定义一个自定义用途——我们可以对表单进行编码,以允许用户使用 Control-Tab 组合在 Tab 键的正常使用/含义和我们的自定义使用。

于 2009-02-04T07:52:33.870 回答
1

自己找到了一个解决方案 - 覆盖 bool RichTextEdit.ProcessCmdKey(ref Message m, Keys keyData)。

于 2009-02-04T10:23:34.890 回答
0

您说您使用的是“RichTextEdit”控件,但我猜您的意思是 RichTextBox。如果是这样,您应该能够将AcceptsTab属性设置为 True 以允许它处理制表键。

于 2009-02-04T07:50:08.180 回答