完全禁用表单上的TabOrder

时间:2011-06-06 21:45:36

标签: c# winforms

WinForms:我不想要任何Tab键顺序。我希望自己能够使用我需要的一些逻辑以编程方式处理表单上的所有Tab键顺序。 如何完全禁用Tab键顺序?我假设在那之后我应该处理每个控件或类似事件的KeyDown事件....

4 个答案:

答案 0 :(得分:3)

您需要覆盖表单的ProcessCmdKey()方法。测试keydata == Keys.Tab和(Keys.Shift | Keys.Tab)分别检测前向和后向标签。返回true表示您已使用该密钥,不应再使用该密钥。这违反了Tab键的Winforms默认处理。控件不需要进行其他更改。

表单的ActiveControl属性告诉您哪个控件当前具有焦点,您需要使用它来确定下一个应该关注哪个控件。请注意,它在技术上可以为空。注意嵌入容器控件中的控件,如Panel或UserControl。做这项工作绝对不愉快,也很难维护。只有在表单上的控件数量有限时才能执行此操作。

答案 1 :(得分:2)

正如Adrian所说,通过将tab stop设置为false,您可以禁用它 像这样的函数可用于对所有tabstop

进行diable
private void DiableTabStop(Control ctrl)
{
    ctrl.TabStop = false;
    foreach (Control item in ctrl.Controls)
    {
        DiableTabStop(item);
    }
}

并在表单加载时调用它

DiableTabStop(this);

答案 2 :(得分:1)

一种方法是将表单中每个控件的TabStop属性设置为false。这将阻止Tab键给出控件焦点。

如果您不想为每个控件手动执行此操作(例如在设计视图中),您可以创建一个方法,该方法将迭代窗体的Controls集合中的所有控件并设置属性在每一个上,然后从表单的构造函数中调用它。

答案 3 :(得分:-1)

除了禁用pageframe的制表位之外,正如您所提到的,您想要控制哪个“制表符”处于活动状态。您可以在“WhichTab”的表单上显示自定义属性。然后,覆盖click事件并检查传入的sender / eventarg页面是否是另一个页面的那个...无论如何,强制焦点回到“WhichTab”你控制设置...准备激活所述页面时,告诉选项卡控件对象激活新页面以显示给用户。