【问题标题】:How to navigate tabcontrol with arrow keys?如何使用箭头键导航 tabcontrol?
【发布时间】:2015-07-21 20:00:20
【问题描述】:

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

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

【问题讨论】:

  • 按住 CTRL 键并按向左或向右箭头键切换选项卡。标准操作系统行为,任何程序中的所有选项卡控件都以这种方式运行,请勿更改。
  • CTRL + 左/右没有做任何事情,但 CTRL + TAB 有效!谢谢。

标签: c# winforms events input


【解决方案1】:

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

但这可能会与其他控件发生冲突: 例如在文本框中向左/向右移动光标。

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

    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++;
            }
        };
    }

注意:经过更多测试后,它适用于包含 TextBoxes 的 TabSheets,但如果 R​​adioButtons 在 TabSheet 中具有焦点,则它不起作用。

【讨论】:

  • 我在我的问题中说我试过了,谢谢
  • 因此,如果您添加一个选项卡控件,然后在其中一个页面上放置一个文本框,然后尝试在文本框内按左/右键,它将切换选项卡?
  • 代码已编辑 - 但我的解决方案适用于某些控件。 :(
最近更新 更多