如何在选中时阻止选项卡呈现?

时间:2010-12-02 07:20:06

标签: c# .net winforms user-interface tabcontrol

我希望能够让用户能够浏览选项卡,将焦点设置到每个选项卡,但只有当他们点击输入时,标签页才会呈现。

你会认为油漆事件会涉及,但我不知道如何“取消”它,如果那甚至可以做到这一点..

2 个答案:

答案 0 :(得分:1)

首先,我应该提醒您,您要覆盖标准的Windows行为。在任何属性页面对话框或使用用户界面中的选项卡的任何其他位置,使用左右箭头键将翻转选项卡并使它们在选项卡控件中显示其内容。您无需按Enter键即可显示所选标签页。如果您决定采用这种方式,请确保您的用户了解您的应用程序是不同的(了解用户的需求)。

也就是说,您可以通过处理TabControl的{​​{3}}来覆盖此行为,检测其中一个箭头键何时被按下,并取消它。 For例如:

private void myTabControl_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    //Check to see if an arrow key was pressed
    if ((e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right))
    {
        //Cancel the keypress by indicating it was handled
        e.Handled = true;
    }
}

但是,一旦执行此操作,用户将无法将焦点设置到特定标签页的选项卡,因为一旦标签获得焦点,标签页就会立即显示在视图中。这由父TabControl处理,与Paint事件无关(该事件负责如何控件的绘制,而不是何时或为何)。

当然,您始终可以确定是否在同一KeyDown事件中按下了Enter键并激活了您希望的任何标签页(例如,通过使用每次相应时递增/递减的计数器变量按下箭头键,但是没有可见的指示,用户哪个标签将被带入视图。不会绘制焦点矩形。

另请注意按 Ctrl + Tab Ctrl + Page Up / Page Down 将在标签页之间切换。如果这不合需要,您还需要注意并取消这些组合键。
每当您开始尝试覆盖默认行为时,您需要更多比你只是围绕它设计你的应用程序的麻烦。如果您有特殊原因需要使用Enter键提交标签页切换,我们可能会帮助您提供更简单,更好的解决方案。

答案 1 :(得分:0)

我不确定我理解您要完成的任务,但听起来您可以使用Visible属性来完成。

当用户切换到TabPage时,您应该能够将TabPage的可见性设置为false,然后仅在您需要时将其设置为true。