3

我有一个由我的老板设计的 VB.NET (2005) 应用程序,它使用了 100 多个输入和显示控件(文本框、组合框等),其中许多都带有关联的标签。我的老板让我设置 tab 顺序,然后捕获按键,以便用户可以使用 enter 来导航控件。我有 2 个这样的应用程序可以使用。

对于选项卡顺序,我无法使用 View/TabOrder 功能,因为显示了太多蓝色的小 tabindex 弹出窗口,我看不到要单击的表单上的任何控件。我尝试单击“通过”弹出窗口并取得了一些成功,但它仍然没有给我想要的标签顺序。CodeSMART 附带的选项卡助手也没有给我想要的结果,所以我可以使用它。

此用户控件上的控件分布在许多组中,而这些组又分布在几个拆分容器面板中。主拆分容器中的第一个面板有 3 个主要的组合框,它们是通过工具条按钮选择的(它将所需的组合框设置为可见并将其他组合框设置为不可见。)

例子:

Private Sub ShowMainPanel()
    'Note: Panels are groupboxes
    Me.MaterialPanel.Visible = False
    Me.HaulPanel.Visible = False
    Me.MainPanel.Visible = True

End Sub

这些组合框中的每一个都包含更多的组合框,每个组合框包含 1 到 15 个控件。有些是只读的,但有些需要用户提供信息。所需控件的制表位设置为 true。

所以我手动将每个主组面板的 tabindexes 设置为 0 到 2。然后对于第一个 groupbox(mainpanel),我为其中包含的每个控件和 groupbox 设置 tabindex。非容器类型控件的 tabindexes 设置为 0 到 25,然后主面板上的组框(子组)是 26 到 48。然后我转到这些子组中的每个控件并为这些控件设置选项卡索引,从该组的 0 到 Control.count-1。

总之,我的标签顺序如下所示(缩写):

mainPanel = 0
  1st fields = 0.0
  2ndfield = 0.1
  3rd field = 0.2
  1st group = 0.3
    1st field in 1st grp1 = 0.3.0
    2nd field in 1st grp1 = 0.3.1
  2nd group = 0.4
    1st field in 1st grp2 = 0.4.0
    2nd field in 1st grp2 = 0.4.1
materialPanel = 1
  1st fields = 1.0
  2ndfield = 1.1
  3rd field = 1.2
  1st group = 1.3
    1st field in 1st grp1 = 1.3.0
    2nd field in 1st grp1 = 1.3.1
  2nd group = 1.4
    1st field in 1st grp2 = 1.4.0
    2nd field in 1st grp2 = 1.4.1

注意:例如,我实际上并没有输入 1.4.0 作为 tabindex,而是为控件输入 0,为子组输入 4,为主组输入 1。

然后,我根据标签顺序通过 Document Outline 面板设置 zorder。

一旦我完成了所有这些,我终于能够获得我想为主面板工作的标签顺序。

但是当我将同样的方法应用于其他 2 个分组框(materialPanel 和 haulpanel)时,这些选项卡将被完全忽略。标签在应用程序中根本不起作用。用于第 2 个到主组框(MaterialPanel 和 HaulPanel)。该应用程序是控件库,因此我在调试时使用内置的 UserTestContainer,当显示第二个 2 组框之一时,tab 键将焦点移出应用程序并进入测试容器。

在第一个组框(MainPanel)上不会发生这种情况。它工作正常。

整理这些东西花了我大约 3-4 个小时来完成繁琐的工作。由于控件的数量,此应用程序很难使用,因为任何时候对表单设计器进行更改,都需要 15-20 秒的时间来处理它。

有没有人知道这里发生了什么?

4

2 回答 2

0

听起来 GroupBoxes 被分配到表单上的最后一个选项卡索引,因此输入焦点的下一个可行选项是表单本身,在这种情况下是测试容器。

您可以捕获 KeyPreview 事件吗?取消按键,然后只使用内部维护的控件顺序集合来提供焦点。鉴于控件的数量,您似乎应该在代码中完成大部分操作。如果您使用 Groupbox/Panel 的 .Controls 属性并通过迭代该集合并找到您想要的确切控件来处理焦点,则维护会容易得多。

于 2009-07-16T03:00:10.450 回答
0

我无法使用 View/TabOrder 功能,因为显示了太多蓝色的小 tabindex 弹出窗口,我看不到要单击的表单上的任何控件。

这是您可能想要*.designer.vb手动编辑文件的极少数情况之一。设计器文件由 Visual Studio 表单编辑器生成,其中包含创建和设置表单中所有控件的初始属性的代码。通常你真的不想接触这个文件,但如果你可以通过视觉设计器来获得它们,这可能是下一个最佳选择。

于 2019-11-17T05:52:35.103 回答