正常情况下,按TAB键可将焦点更改为给定Tab键顺序中的下一个控件。我想阻止它并让TAB键做其他事情。在我的情况下,我想将焦点从组合框改为完全不同的控制。我不能通过设置Tab键顺序来完成此操作。我需要以编程方式执行此操作。知道怎么样?似乎KeyDown和KeyPress事件无法正确处理TAB键。 感谢。
答案 0 :(得分:5)
在您的表单上覆盖ProcessDialogKey
或ProcessTabKey
并根据所关注的控件执行您想要的逻辑。
答案 1 :(得分:3)
基于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
(即TextBox
或RichTextBox
),并且Multiline
属性设置为true
,那么您只需设置AcceptsTab
属性为true
。
TextBoxBase.AcceptsTab Property
获取或设置一个值,指示在多行文本框控件中按TAB键是否在控件中键入TAB字符,而不是将焦点移动到Tab键顺序中的下一个控件。
答案 2 :(得分:0)
覆盖控件的LostFocus事件,请参阅下面的链接以获取示例:
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.lostfocus.aspx
答案 3 :(得分:0)
您可以在KeyDown
事件中尝试此代码:
if (e.KeyCode == Keys.Tab) {
//your logic
e.SuppressKeyPress = true;
}
如果单击按钮是Tab,则执行所需的任何自定义逻辑,然后调用SuppressKeyPress
以阻止KeyPress
事件触发并为您调用正常的Tab逻辑。
答案 4 :(得分:0)
由于我正在构建UserControl,我最终在控件上使用了PreviewKeyDown
事件。这样可以避免必须处理主机表单上的按键事件。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.previewkeydown.aspx