繁体   English   中英

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

[英]How to intercept the TAB key press to prevent standard focus change in C#

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

覆盖表单上的ProcessDialogKeyProcessTabKey ,并根据所关注的控件执行所需的逻辑。

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

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

然后,如果要自定义行为,则可以处理控件的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());
    }
}

TextBoxBase替代方案

如果控件是从TextBoxBase (即TextBoxRichTextBox )派生的,并且Multiline属性设置为true ,那么您只需将AcceptsTab属性设置为true

TextBoxBase.AcceptsTab属性

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

覆盖控件的LostFocus事件,请参阅下面的链接以获取示例:

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx

您可以在KeyDown事件上尝试此代码:

if (e.KeyCode == Keys.Tab) {
  //your logic
  e.SuppressKeyPress = true;
}

如果单击按钮是Tab,则执行所需的任何自定义逻辑,然后调用SuppressKeyPress以停止触发KeyPress事件并为您调用正常的Tab逻辑。

由于我正在构建UserControl,我最终在控件上使用了PreviewKeyDown事件。 这避免了必须处理主机表单上的按键事件。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM