【问题标题】:Setting TabIndex in CF .net framework在 CF .net 框架中设置 TabIndex
【发布时间】:2009-01-27 01:30:55
【问题描述】:

我有一个包含 3 个面板的表单,创建面板是因为在某些时候我需要隐藏/显示某些控件组。到目前为止,它工作得很好——直到我被要求有一种特定的方式来使用 TAB 键导航表单。

首先,我注意到 Panel 对象中没有 TabIndex 属性,最重要的是,我不想遵循嵌套导航算法,我只想设置自己的顺序。

根据我目前在网上阅读的内容,面板无法做到这一点。我唯一的选择是将表单上的所有控件放在同一个面板中。

有什么想法吗?我不想重新安排应用程序,并开始隐藏和显示各个控件。

【问题讨论】:

    标签: c# .net compact-framework tabindex


    【解决方案1】:

    按 TAB 键会将焦点移动到 ControlCollection 中的下一个控件。由于焦点始终在 Panel 内的控件中,而不是在面板本身中,您怎么能期望 Panel 支持选项卡索引?

    我建议你再想想你想要做什么。当特定面板可见时,TAB 应该在其中的控件周围导航。 TAB 将您移到下一个面板中是没有意义的。这通常通过按钮或其他控件来完成。用户期望 TAB 移动焦点而不执行操作。此外,如果您想让 TAB 让您在面板中移动,那么您需要将所有控件的 Tab Stop 属性设置为 false。

    【讨论】:

      【解决方案2】:

      我有同样的问题。我的解决方案是将所有控件放在表单的子面板中。 .net 算法的制表符是使用 TabIndex 在“当前”容器内进行制表符。如果容器中的任何 TabIndexes 相同,则 z 顺序中的第一个将是第一个,依此类推。

      一旦在容器中(表单就是容器),除了容器(面板)之外的所有控件都首先被选项卡。当离开最后一个非容器控件时,面板被递归到。

      因此,如果所有控件都放置在同一级别的容器/面板中,则您的选项卡将按预期完成。

      示例问题:

      形式 控制1 Tabindex = 1 面板1 control2 Tabindex=2 控制3 Tabindex=2 面板2 control4 Tabindex=4 control5 Tabindex=5 control6 Tabindex=6

      Tabbing 将按照以下顺序(不是您所期望的):

      控制1 Control6

      要使其正确进入选项卡,请按以下模式布局:

      形式 面板0 控制1 Tabindex = 1 面板1 control2 Tabindex=2 控制3 Tabindex=2 面板2 control4 Tabindex=4 control5 Tabindex=5 面板3 control6 Tabindex=6

      【讨论】:

        【解决方案3】:

        我认为你几乎被困在那里——我不知道有什么直接的方法可以避免嵌套导航。

        然而,我想说的是,显示/隐藏控件组真的没什么大不了的:

        private void SetPrimaryControlVisibility(bool visible)
        {
          ctrlA.Visible = visible;
          ctrlB.Visible = visible;
          ctrlF.Visible = visible;
        }
        
        private void SetSecondaryControlVisibility(bool visible)
        {
          ctrlC.Visible = visible;
          ctrlE.Visible = visible;
          ctrlG.Visible = visible;
        }
        

        这需要更多的代码编写——但这花了我 20 秒。如果它们都在表单表面上,您可以使用选项卡索引。

        虽然现在我想了想,但他们在自己的面板上有什么问题?如果您使用面板来显示/隐藏,那么无论如何您都不会切换到其他面板。

        另一种选择是编写关键事件处理程序,但我会远离——这将是一个无法维护的巨大混乱。

        【讨论】:

          猜你喜欢
          • 2012-02-29
          • 1970-01-01
          • 2011-01-09
          • 1970-01-01
          • 2020-06-15
          • 1970-01-01
          • 1970-01-01
          • 2010-10-13
          • 2010-10-01
          相关资源
          最近更新 更多