多个面板和组框以及Tab键维护

时间:2009-07-10 16:40:34

标签: vb.net winforms user-controls controls tabindex

我有一个由我的老板设计的VB.NET(2005)应用程序,它使用超过100个输入和显示控件(文本框,combox等),许多与标签相关联。我的老板让我设置Tab键顺序,然后陷阱按键,以便用户可以使用enter来导航控件。我有2个这样的应用程序可供使用。

对于Tab键顺序,我无法使用View / 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。

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

然后我根据Tab键顺序通过Document Outline面板设置zorder。

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

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

您能捕获KeyPreview事件吗?取消按键,然后只使用内部维护的控件顺序集合来获得焦点。考虑到控件的数量,您似乎应该在代码中执行大部分操作。如果使用Groupbox / Panel的.Controls属性并通过迭代该集合并找到所需的确切控件来处理焦点,则维护将更加容易。

答案 1 :(得分:0)

  

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

这是少数情况,您可能需要手动编辑*.designer.vb文件。设计器文件是由Visual Studio表单编辑器生成的,并且具有创建和设置表单中所有控件的初始属性的代码。通常,您真的不想触摸此文件,但是如果您可以通过视觉设计器找到它们,那么这可能是次佳的选择。