如何在编辑控件中截取Tab键

时间:2009-02-04 07:45:03

标签: .net winforms key

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

我最好的就是这个:

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键注册正常,但在此之后控件仍然处理键并将焦点移动到下一个控件。似乎没有办法消耗这个关键事件。

3 个答案:

答案 0 :(得分:1)

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

TabKeyIntercept - Intercept and process the Tab key in a Windows.Forms form

  

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

     

而且,事实证明,如果   ProcessTabKey()方法的返回值   是假的,Tab键确实成功   进入OnKeyDown()方法。但是,   当然,如果你的代码“消耗”了   ProcessTabKey()方法中的Tab键,   你可能不需要处理它   在OnKeyDown()方法中。

     

另外,Control-Tab组合   进入OnKeyDown()方法。

     

所以,知道这些事情,我们就是   准备定义一个定制的用途   对于Tab键 - 我们可以编码   表单允许用户使用   Control-Tab组合切换   正常使用/意义之间   Tab键和我们的自定义用途。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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