如何截取TAB键按键以防止C#中的标准焦点更改

Joh*_*ohn 2 .net c# focus winforms

通常,在按TAB键时,您可以将焦点更改为给定Tab键顺序中的下一个控件.我想阻止它并让TAB键做其他事情.在我的情况下,我想将焦点从组合框改为完全不同的控制.我不能通过设置Tab键顺序来完成此操作.我需要以编程方式执行此操作.知道怎么样?似乎KeyDown和KeyPress事件无法正确处理TAB键.谢谢.

lig*_*t78 5

覆盖ProcessDialogKeyProcessTabKey在您的表单上执行您想要的逻辑,具体取决于所关注的控件.


Zan*_*ier 5

根据 JRS 对使用 PreviewKeyDown 事件的建议,这会将按键发送到控件:

private void textBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
        e.IsInputKey = true;
}
Run Code Online (Sandbox Code Playgroud)

然后,如果要自定义行为,则可以处理控件的 KeyDown 事件:

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Tab)
    {
        MessageBox.Show("The tab key was pressed while holding these modifier keys: "
                + e.Modifiers.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

TextBoxBase 替代品

如果控件派生自TextBoxBase(ieTextBoxRichTextBox),并且Multiline属性设置为true,则您可以简单地将AcceptsTab属性设置为true

TextBoxBase.AcceptsTab 属性

获取或设置一个值,该值指示在多行文本框控件中按 TAB 键是否在控件中键入 TAB 字符,而不是将焦点移到 Tab 键顺序中的下一个控件。