我希望能够让用户能够浏览选项卡,将焦点设置到每个选项卡,但只有当他们点击输入时,标签页才会呈现。
你会认为油漆事件会涉及,但我不知道如何“取消”它,如果那甚至可以做到这一点..
答案 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。