【问题标题】:How to intercept a Tab key in edit control如何在编辑控件中拦截 Tab 键
【发布时间】:2009-02-04 07:45:03
【问题描述】:

我需要 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 键注册良好,但之后控件仍会处理该键并将焦点移至下一个控件。似乎没有办法消费这个关键事件。

【问题讨论】:

    标签: .net winforms key


    【解决方案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 键和我们的自定义用法。

    【讨论】:

    • ProcessTabKey 是 Form 方法。有一个自定义表单,只是为了改变一个字段的行为是非常笨拙的。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 真的吗?多么有趣!我会将答案留在这里,以便阅读它的其他人可以看到您的评论并了解为什么它不是答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2012-05-15
      • 1970-01-01
      • 2017-01-10
      • 2010-09-10
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多