完全禁用表格上的TabOrder

问题描述

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

解决方法

        您需要重写表单的ProcessCmdKey()方法。测试keydata == Keys.Tab和(Keys.Shift | Keys.Tab)分别检测向前和向后的制表符。返回true表示您已使用该密钥,并且不再应该使用它。这使Winforms的Tab键默认处理无效。无需对控件进行其他更改。 窗体的ActiveControl属性告诉您当前哪个控件具有焦点,您将需要使用它来确定接下来应该关注哪个控件。请注意,从技术上讲,它可以为null。注意嵌入在容器控件中的控件,例如Panel或UserControl。进行这项工作绝对令人不快,也很难维护。仅当表单上的控件数量有限时,才执行此操作。     ,        正如Adrian所说,通过将制表位设置为false可以禁用它 这样的功能可以使所有制表符失效
private void DiableTabStop(Control ctrl)
{
    ctrl.TabStop = false;
    foreach (Control item in ctrl.Controls)
    {
        DiableTabStop(item);
    }
}
并在表单加载时调用它
DiableTabStop(this);
    ,        一种方法是将窗体中每个控件的
TabStop
属性设置为
false
。这将防止Tab键使控件成为焦点。 如果您不想为每个控件手动执行此操作(例如在设计视图中),则可以创建一种方法,该方法将遍历表单的“ 4”集合中的所有控件并在每个控件上设置属性,然后从表单的构造函数中调用它。     ,        如前所述,除了禁用页面框架的制表位之外,您还想控制哪个“制表符”处于活动状态。您可以在\“ WhichTab \”表单上显示一个自定义属性。然后,覆盖click事件并检查传入的发件人/ eventarg页是否是另一页的...。无论如何,强制将焦点放回到\“ WhichTab \”,您可以控制设置...准备激活时所说的页面,告诉选项卡控件对象激活新页面以显示给用户。