. net工具条/菜单条焦点问题
本文关键字:焦点 问题 菜单 工具 net | 更新日期: 2023-09-27 17:51:15
无论场景是什么,我都能够100%地重现这个恼人的问题。创建一个。net项目,c#或VB.Net。向窗体添加ToolStrip控件。创建几个简单的DropDownButton(s),至少包含2个菜单项。添加您想要的任何其他控件,一个列表框(填充它以便它可以正确接收焦点)和一个ComboBox控件。指定快捷键或在工具条上启用TabStop,以便它可以通过键盘接收焦点。
运行项目(调试/发布,任何你喜欢的)。使用你的键盘给工具条焦点(通过标签或快捷键)。向下箭头进入子项目。现在选择escape键折叠Toolstrip子菜单。选项卡到包含一些项目的列表框或组合框。一切看起来都很好,对吧?现在使用方向键在这些控件中导航…惊喜!你背靠在工具条上,而你认为有焦点的控件却没有!
我已经尝试了多种方法来强制关注列表框。一个例子是,我将为OnEnter (ListBox.Enter+=…)添加事件处理程序,并添加一些代码,如:
ListBox.Focus();
ListBox.Select();
什么都没有成功…似乎一旦菜单在工具条上展开,你就会永远用键盘控制这个控件……这对我来说很重要,因为我的工作对象是只使用键盘导航的盲人用户。这是臭虫吗?我无法在MFC中复制这个…
有什么建议吗?
更新 我能够找到一个不复制这种奇怪的控制…
System.Windows.Forms。主菜单是唯一的"工具栏对象",它的行为不像其他的…
我仍然想要一些关于上面的反馈(帮助别人和我自己)…
更新2 潜在的问题是在[ToolStripObject]。TabFocus财产……如果设置为false,一切似乎工作正常…将焦点放回"看起来"已经聚焦的控件。但是,让盲人用户通过标签页浏览所有UI控件是一件很方便的事情……可惜这个属性不能正常工作....
我通过重写ToolStripMenuItem:
让它工作public class ToolStripMenuItemEx : ToolStripMenuItem {
protected override bool ProcessCmdKey(ref Message m, Keys keyData) {
if (keyData == Keys.Escape) {
ToolStripDropDownButton tb = this.OwnerItem as ToolStripDropDownButton;
if (tb != null) {
tb.HideDropDown();
return false;
}
}
return base.ProcessCmdKey(ref m, keyData);
}
}