【问题标题】:How to move TabStop (losing focus) across several GroupBoxed controls?如何在多个 GroupBoxed 控件之间移动 TabStop(失去焦点)?
【发布时间】:2021-11-11 08:29:24
【问题描述】:

我的 VB.NET 应用程序中的键盘控制和 TabStops 似乎存在问题。

我已经在此处和网络上进行了搜索,发现了一些相关主题(不是 1000% 相同的问题),并且我可以在网络上找到的一些解决方案对我的情况没有帮助。

我不确定我的问题是否主要与使用分组框有关并且可以解决。 作为控件设置的粗略描述,请参见此处的示意图:

组框1____ 组框2____ 组框3

控制1_______ 控制4________ 控制7

控制2_______ 控制5________ 控制8

控制3_______ 控制6________ 控制9

我已经为分组框和控件设置了 TabIndex,以便 Tab 可以在 Control1 到 control9 之间循环。 当表单加载时,我通过代码将焦点放在其中一个控件上,以使初始焦点放在一个控件上。 这没有任何问题。使用 Shift-Tab 向后循环也可以正常工作。

现在的问题是当用户不小心越过最后一个控件时,例如Control9 有焦点并且他按 TAB 或 Control1 有焦点并且他按 Shift-TAB 控件失去焦点但它不会跳到 TabStop=True 的下一个最低或最高 TabIndex 控件。

基本上,它会进入没有控件有焦点的状态,按 TAB 或 Shift-TAB 什么也不做。 (我希望它以循环方式进行)

唯一的方法是然后用鼠标单击任何控件以重新获得焦点并重新获得键盘控制权。 不确定这是错误还是功能。

我了解 VB.NET 将每个组框作为一组单独的控件来处理,但不确定这是否与我的问题有关。

表单上还有一些其他控件具有更高的 TabIndex 数字,但 TabStop 设置为 False(它们中的大多数无论如何都没有输入控件,例如一些图片框或标签)。这通常不会影响我的理解。

它们是什么类型的控件是否相关? (例如,Control9 是一个复选框,而 COntrol1 是一个单选按钮控件)

我已经尝试过解决方法,例如捕捉按键事件或失去焦点事件以通过代码强制重新关注下一个控件,但由于某种原因,我无法以编程方式执行此操作,因为某些尝试过的事件在使用时似乎没有触发TAB 或 Shift-Tab。

是否有人熟悉这个问题并对我如何移动提出建议,例如按 T​​AB 时从 Control9 到 Control1? (或按 Shift-TAB 时从 Control1 到 Control9)?

【问题讨论】:

  • 至于 但在我的情况下,一旦组中的最后一个控件通过点击 Tab 失去焦点,它就不会再重新获得对任何其他控件的焦点。 (无论我之后按 TAB 的频率如何)。正如您在 GIF 中看到的那样,这不会发生。仔细检查您的布局和代码。
  • 似乎与我的组框不在主窗体上有关,但该窗体有一个带有两个面板(上部和下部)的 SplitContainer。带有所有控件的组框位于面板 1 的上部,用作菜单。当我失去焦点时,会发生面板 2 获得焦点(它承载一个浏览器插件)。我已经尝试将SplitContainer 设置为唯一的高TabIndex (99) 并将TabStop 属性设置为False,但它仍然获得Tabstops...我如何强制tabstops 仅保留在Splitcontainer 的面板1 中。两个面板本身似乎在设计器中没有任何 TabStop 属性。
  • (它承载了一个浏览器插件)。 这是窃取并保持焦点。请参阅this 和类似的帖子。

标签: .net vb.net


【解决方案1】:

问题是由 SplitContainer 控件引起的,该控件在第一个面板中包含带有控件的组框,并且在 Form Load 事件期间将 CEFSharp 浏览器插件添加到第二个面板。

最初对我来说不是很明显,因为浏览器没有显示在 VS 设计器中,只在运行时加载。

浏览器插件在获得焦点后劫持了 TabStops。

解决方案是在浏览器插件启动并添加到第二个面板后,通过 Form Load 事件中的代码将 CEFSharp 浏览器插件的 TabStop 属性更改为 False。

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 2012-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多