MS Access选项卡控件:焦点错误

时间:2010-11-15 17:04:43

标签: ms-access tabcontrol

我有一个包含不同页面的标签控件。使用此选项卡控件启动表单时,选项卡会丢失,内部页面将获得所有屏幕焦点。选项卡控件用于导航,因此用户将以这种方式迷路。

有没有办法让屏幕上的标签可见,而不只是将屏幕尺寸调整为更小?

期望的结果:

+--------------------+
| Tab1 | Tab2 | Tab3 |
+--------------------+
| Name: ______       |

实际屏幕:

                        ^
+--------------------+ |_|
| Name: ______       | | |

3 个答案:

答案 0 :(得分:4)

缩小选项卡控件的大小(正如您自己发现的那样),但是有另一种解决方法:

  1. 添加命令按钮并将其与选项卡控件的左上角对齐
  2. 将其Tab Stop属性设置为No(在命令按钮属性表的“其他”选项卡中)
  3. 发送至返回以将命令按钮置于选项卡控件
  4. 后面
  5. 在表单的OnOpenOnLoad事件中,在命令按钮上调用.SetFocus方法
  6. 使用SendKeys(我知道,我知道......)选项卡到Tab Control
  7. 示例代码:

    Private Sub Form_Open(Cancel As Integer)
        Me.HiddenCommandButton.SetFocus
        SendKeys "{Tab}"
    End Sub
    

    上述步骤的说明:

    1. 这允许您指定Access应该在屏幕上排列表格的位置。
    2. 将命令按钮设置为“否”会阻止用户意外地对其进行标记并导致混淆。
    3. 向后方发送按钮会将其隐藏在用户之外,并防止其干扰任何鼠标点击。
    4. 由于我们在步骤2中关闭了Tab Stop属性,因此必须在表格启动时将焦点设置到命令按钮。
    5. 使用SendKeys(总是最后的手段,并且有充分的理由)来模拟标签按下为标签控件提供“键盘焦点”(只要标签控件是标签顺序中的第一个控件,无论哪个部分都是形成控件是其中的一部分。
    6. 杂项备注:根据提问者的要求,我将在答案中加入一些评论:

        

      @mwolfe :关于SendKeys的最后一个注释......它在UAC下爆炸了   VISTA / Win7的。如果你能活下去   键盘焦点,我会说离开   完全发送出去。如果你需要它   你要么想要添加错误   处理忽略错误(如果你   不介意你的一些用户输了   键盘焦点功能)或   绕过SendKeys并使用WinAPI   直。卡尔彼得森提供了一个   交钥匙解决方案:   vb.mvps.org/samples/SendInput我有   从未使用它所以不能评论它   可靠性,但卡尔是微软   MVP让他获得了一定的信誉。

           

      @Roman Glass :mwolfe02我相信你这个方法会起作用,但是   重点对我和一些用户至关重要   在Windows 7下工作。我会的   暂时解决这个问题   关于用户反应。   不过我认为你的解决方案   值得一试。最后我有   与WinAPI交谈。也许你可以   编辑你的答案,包括这个   直接评论。谢谢!

      对于将来可能会找到此答案的人,请注意上述步骤5仅在您需要使用标签控件来接收键盘焦点时才需要(这是原始提问者的关键要求)。如果你没有它,我建议你这样做。

      更新:正如David Fenton在评论中指出的那样,您可以使用Ctl + Tab / Ctl + Shift + {{ 1}}在标签之间来回移动。这与大多数标签界面(例如浏览器)一致,并且无需使用Tab

答案 1 :(得分:0)

嗯,我知道我只使用了Tab控件一次或两次 - 但是在执行/加载表单时,表单上没有出现问题。当然,除了表单的详细信息部分之外,我从来没有在任何地方使用它,但是我要检查看看野兽是否已经将它的启用或可见属性(如果适用)设置为否。当然,我可能是错的 - 它发生了,我渴望在它发生时学到新的东西。 :)

答案 2 :(得分:0)

我不知道我理解这个问题,但是在评论中,你说Access不允许你将焦点设置到标签控件,但你可以将焦点设置到标签页:

  Me!ctlTab.Pages(N).SetFocus

...其中N是您要设置焦点的标签页的索引),或者使用:

  Me!pgeTabPageName.SetFocus

这两项工作都可以将焦点设置到标签页。

你说你想把焦点设置到标签控件,但我无法弄清楚你为什么要这样做。选项卡控件本身没有可以获得焦点的元素 - 只有其Pages集合的成员才能获得焦点。

同样,我建议你因为其他原因把自己画成一个角落而且没有解决方案。因此,你必须弄清楚如何避免陷入这个不可解决的问题。我根本无法理解您对问题的解释,以便能够提供解决方案,但我怀疑没有办法通过不同的方法解决问题。