完全禁用表单上的TabOrder

本文关键字:TabOrder 表单 | 更新日期: 2023-09-27 17:58:27

WinForms:我不想要任何选项卡顺序。我希望自己能够用程序处理表单上的所有制表顺序,并使用我需要的一些逻辑。如何完全禁用制表顺序?我想在那之后,我应该处理每个柔术的KeyDown事件或一些类似的事件。。。。

完全禁用表单上的TabOrder

您需要重写表单的ProcessCmdKey()方法。测试密钥数据==密钥。Tab键和(Keys.Shift|Keys.Tab)分别检测向前和向后Tab键。返回true表示您已经使用了该键,不应该再使用它。这会破坏Winforms对Tab键的默认处理。不需要对控件进行其他更改。

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

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

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

并在表单加载时调用它

DiableTabStop(this);
一种方法是将表单中每个控件的TabStop属性设置为false。这将阻止tab键为控件提供焦点。

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

正如您所提到的,除了禁用页面框架的选项卡停止之外,您还想控制哪个"选项卡"处于活动状态。你可以在你的表单上有一个自定义属性,应该显示"WhichTab"。然后,覆盖单击事件并检查传入的sender/eventarg页面是否是另一个页面的页面。。。不管怎样,强制将焦点放回你控制设置的"WhichTab"。。。当准备激活所述页面时,告诉选项卡控制对象激活新页面以显示给用户。