Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选中/高亮显示时,ToolStripMenuItem不在可见区域_C#_Winforms - Fatal编程技术网

C# 选中/高亮显示时,ToolStripMenuItem不在可见区域

C# 选中/高亮显示时,ToolStripMenuItem不在可见区域,c#,winforms,C#,Winforms,我有一个ContextMenuStrip,它包含动态生成的ToolStripMenuItems的子菜单。最多有80个子菜单项。按所需菜单项的第一个字母可正确选择该菜单项,但如果该菜单项恰好超出可见范围(在滚动箭头控制的范围内),则不会显示该菜单项-用户必须先按向上箭头,然后按向下箭头,以便在屏幕上显示所需选项并聚焦 例如,我有6个以“m”开头的项目,但只有3.5个可见。我点击m 1,第一个项目突出显示,我再点击m 3次,我可以看到半个选定的行(它在可见区域的底部),再点击m两次,我看不到选定的行

我有一个ContextMenuStrip,它包含动态生成的ToolStripMenuItems的子菜单。最多有80个子菜单项。按所需菜单项的第一个字母可正确选择该菜单项,但如果该菜单项恰好超出可见范围(在滚动箭头控制的范围内),则不会显示该菜单项-用户必须先按向上箭头,然后按向下箭头,以便在屏幕上显示所需选项并聚焦

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

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

有关如何执行以下操作的任何提示:

a)滚动工具栏的子菜单


b)允许子菜单使用多列(希望用户的分辨率不会低得离谱)。

您是否尝试过
上下文菜单上的
按键事件?您可能能够检测到更改所选项目的按键,然后在每个项目上使用
ToolStripMenuItem.selected
属性来确定所选项目。然后使用
ContextMenuStrip
上的
autoscroloffset
将项目滚动到视图中


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

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

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


祝你好运

CMS上的按键事件不会触发子菜单。我可以捕捉ProcessDialogKey并选择正确的元素,但对正确的元素执行“选择”不会向下滚动子菜单以显示所选项目。AutoScrollOffset似乎不适用于子菜单,因为ContextMenuStrip是从ScrollableControl派生的(忽略它隐藏的事实),您是否尝试将AutoScroll设置为true?我收到一个NotsupportedException“ToolStrip不支持AutoScroll属性。”当我试图在ContextMenuStrip或有问题的ToolStripMenuItem上设置AutoScroll属性时。