我有一个ContextMenuStrip,它包含动态生成的ToolStripMenuItems子菜单。最多有80个子菜单项。按下所需菜单项的第一个字母可正确选择它,但如果项目恰好超出可见范围(在滚动箭头处理的范围内),则不显示 - 用户必须按向上箭头然后显示所需选项的向下箭头&专注于屏幕。
例如,我有6个以“m”开头的项目,但只有3.5个可见。我打了一个,第一个项目突出显示,我再打了3次,我可以看到半个选定的行(它位于可见区域的底部),再打m两次,我看不到选择行,然后再一次m,第一个m条目可见并再次选择。
默认情况下,ToolStripMenuItems(TSMI)没有可用的键侦听器,但是如果我将TSMI子类化,我可以捕获ProcessDialogKey和ProcessCmdKey并手动选择正确的选项,但是我无法向下滚动工具条子菜单以确保我的选项可见。
有关如何:
的任何提示a)滚动工具条的子菜单
或
b)允许子菜单使用多个列(并希望用户没有可笑的低分辨率)。
答案 0 :(得分:0)
您是否尝试过KeyPress
上的ContextMenuStrip
活动?您可能能够检测到更改所选项目的按键,然后使用每个项目上的ToolStripMenuItem.Selected
属性来确定选择了哪个项目。然后使用AutoScrollOffset
上的ContextMenuStrip
将项目滚动到视图中。
或者,您可以使用旧的ContextMenu
控件 - 它的项目有Select
个事件。
答案 1 :(得分:0)
我遇到了这个问题。我不记得确切的解决方案(如果你找不到它,请告诉我)但是,基本上,ToolStripMenu具有“最顶级项目索引”的属性。
只需将新选择的项目(例如,第4个“m”)设置为最顶层项目索引,WinForms将处理其余项目。
祝你好运!