选中/突出显示时,ToolStripMenuItem不在可见区域中

时间:2008-11-20 21:08:42

标签: c# winforms

我有一个ContextMenuStrip,它包含动态生成的ToolStripMenuItems子菜单。最多有80个子菜单项。按下所需菜单项的第一个字母可正确选择它,但如果项目恰好超出可见范围(在滚动箭头处理的范围内),则不显示 - 用户必须按向上箭头然后显示所需选项的向下箭头&专注于屏幕。

例如,我有6个以“m”开头的项目,但只有3.5个可见。我打了一个,第一个项目突出显示,我再打了3次,我可以看到半个选定的行(它位于可见区域的底部),再打m两次,我看不到选择行,然后再一次m,第一个m条目可见并再次选择。

默认情况下,ToolStripMenuItems(TSMI)没有可用的键侦听器,但是如果我将TSMI子类化,我可以捕获ProcessDialogKey和ProcessCmdKey并手动选择正确的选项,但是我无法向下滚动工具条子菜单以确保我的选项可见。

有关如何:

的任何提示

a)滚动工具条的子菜单

b)允许子菜单使用多个列(并希望用户没有可笑的低分辨率)。

2 个答案:

答案 0 :(得分:0)

您是否尝试过KeyPress上的ContextMenuStrip活动?您可能能够检测到更改所选项目的按键,然后使用每个项目上的ToolStripMenuItem.Selected属性来确定选择了哪个项目。然后使用AutoScrollOffset上的ContextMenuStrip将项目滚动到视图中。

或者,您可以使用旧的ContextMenu控件 - 它的项目有Select个事件。

答案 1 :(得分:0)

我遇到了这个问题。我不记得确切的解决方案(如果你找不到它,请告诉我)但是,基本上,ToolStripMenu具有“最顶级项目索引”的属性。

只需将新选择的项目(例如,第4个“m”)设置为最顶层项目索引,WinForms将处理其余项目。

祝你好运!