2015-05-11 220 views
1

我有一系列包含文本框和其他输入控件的选项卡的tabcontrol。如果我点击标题标题,我可以使用左右箭头键浏览标签,但是如果我当前在文本框或其他控件中,那么我不能,假设这是因为文本框需要所有的关键字事件。我曾尝试将事件处理程序附加到keydown和previewkeydown,但它们不会被解雇。如何使用箭头键导航tabcontrol?

即使子控件具有焦点,是否有办法通过tabcontrol获取关键事件?

+1

按住CTRL键,然后按左右箭头键切换选项卡。标准操作系统行为,任何程序中的所有选项卡控件都是这样操作的,不要更改它。 –

+0

CTRL +左/右除CTRL + TAB外没有任何作用!谢谢。 – mbdavis

回答

0

您可以使用TabControl的KeyDown事件来侦听箭头键。

但是,这可能会与其他控件冲突: 在TextBox中左右移动光标。

如果所有的控件都是只读的,那么这不是一个大问题。 但是,如果允许人们更改数据,那么拦截箭头键将会干扰标准导航。

private void tabControl1_KeyDown(object sender, KeyEventArgs e) { 
     if (e.KeyCode == Keys.Left) { 
      if (tabControl1.SelectedIndex > 0) { 
       tabControl1.SelectedIndex--; 
      } 
     }; 
     if (e.KeyCode == Keys.Right) { 
      if (tabControl1.SelectedIndex < tabControl1.TabCount - 1) { 
       tabControl1.SelectedIndex++; 
      } 
     }; 
    } 

注意:做完更多的测试,正常工作与包含文本框TabSheets,但如果单选按钮的标签页具有焦点不起作用。

+0

我在我的问题中说过我试过这个,谢谢 – mbdavis

+0

它适用于我的机器。 – Ulric

+0

所以,如果你添加一个选项卡控件,然后将其中一个页面上的文本框,然后尝试按左/右,而在文本框内,它会切换标签? – mbdavis