无论情况如何,我都能 100% 地重现这个烦人的问题。创建一个 .Net 项目、C# 或 VB.Net。将 ToolStrip 控件添加到窗体。创建一些包含至少 2 个菜单项的简单 DropDownButton(s)。添加您希望的任何其他控件、一个列表框(填充它以便它可以正确接收焦点)和一个 ComboBox 控件。分配快捷键或在 ToolStrip 上启用 TabStop 以便它可以通过键盘接收焦点。
运行项目(调试/发布,随你喜欢)。使用键盘为 ToolStrip 提供焦点(通过选项卡或快捷键)。向下箭头进入子项。现在选择退出键以折叠工具条子菜单。Tab 到包含一些项目的列表框或组合框。一切看起来都很棒对吧?现在使用箭头键在这些控件中导航...惊喜!您在 ToolStrip 上的背影,而您认为有焦点的控件却没有!
我尝试了多种方法来强制将注意力集中在 ListBox 上。一个例子是我为 OnEnter (ListBox.Enter+=...) 添加事件处理程序并添加一些代码,例如:
ListBox.Focus();
ListBox.Select();
没有什么是成功的...似乎一旦菜单在工具条上展开,您将永远使用键盘卡在此控件上...这对我来说很重要,因为我与使用的盲人用户一起工作仅键盘导航...这是错误吗?我无法在 MFC 中重现它...
有什么建议么?
更新 我能够找到一个不会重现这种奇怪的控件......
System.Windows.Forms.MainMenu 是唯一与其他“工具栏对象”不同的“工具栏对象”...
不过,我仍然希望对上述内容有一些反馈(对他人和我自己的帮助)......
更新 2 根本问题在 [ToolStripObject].TabFocus 属性内...如果设置为 false 一切似乎都可以正常工作...将焦点返回给“看起来”像集中了焦点的控件。但是,拥有允许盲人用户通过选项卡浏览所有 UI 控件的能力是一个方便实现的事情......太糟糕了,这个属性不能像它应该的那样工作......