我有一个由我的老板设计的VB.NET(2005)应用程序,它使用100多个输入和显示控件(文本框,组合框等),其中许多控件都与标签相关联。我的老板要求我设置选项卡顺序,然后捕获按键,以便用户可以使用Enter来导航控件。我有2个类似的应用程序可以使用。

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

此用户控件上的控件分布在许多组中,而这些组又分布在几个拆分容器面板中。主splitcontainer中的第一个面板具有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。

因此,我将每个主组面板的tabindexindex手动设置为0到2。然后对于第一个groupbox(mainpanel),我为其中包含的每个控件和groupbox设置tabindex。非容器类型的控件的tabindexes设置为0到25,然后主面板上的组框(子组)为26到48。然后转到这些子组中的每个控件,并为这些控件设置tab索引,从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


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

然后,我根据标签顺序通过“文档大纲”面板设置zorder。

完成所有这些操作后,我终于能够获得我要为主面板工作的Tab键顺序。

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

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

设置这些东西花了我大约3-4个小时来进行繁琐的工作。由于控件数量众多,因此该应用程序难以使用,因为只要对表单设计器进行更改,处理过程就需要15到20秒。

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

最佳答案

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

您能捕获KeyPreview事件吗?取消按键,然后仅使用控件顺序的内部维护集合即可获得焦点。鉴于控件的数量,您似乎应该无论如何都要在代码中完成大多数操作。如果您使用Groupbox / Panel的.Controls属性并通过迭代该集合并找到所需的确切控件来处理焦点,则维护将更加容易。

关于vb.net - 多个面板和组框以及选项卡顺序维护,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1110636/

10-11 04:23