2008-11-20 69 views
4

我有一個ContextMenuStrip,其中包含動態生成的ToolStripMenuItems的子菜單。有多達80個子菜單項。按下所需菜單項目的第一個字母即可正確選擇它,但如果該項目碰巧不在可見範圍內(在由滾動箭頭處理的範圍內),則不會顯示 - 用戶必須按向上箭頭然後向下箭頭所需的選項將被顯示&聚焦在屏幕上。ToolStripMenuItem選中/突出顯示時不在可見區域

作爲一個例子,我有6個項目以「m」開頭,但只有3.5個可見。我擊中了第一個項目,第一個項目突出顯示,我再次擊中了m 3次,我可以看到一半選定的一行(它位於可見區域的底部),再擊中兩次,我看不到選擇行,然後m再一次,第一個m條目可見並再次選擇。

默認情況下,ToolStripMenuItems(TSMI)沒有鍵監聽器可用,但是如果我繼承了TSMI,我可以捕獲ProcessDialogKey和ProcessCmdKey並手動選擇正確的選項,但我無法向下滾動tooltrip子菜單以確保我的選項是可見的。

關於如何可以任何提示:

一)滾動工具條的子菜單

B)允許子菜單使用多列(和希望用戶沒有一個可笑的低分辨率)。

回答

0

您是否試過ContextMenuStrip上的KeyPress事件?您可能能夠檢測到更改所選項目的按鍵,然後使用每個項目上的ToolStripMenuItem.Selected屬性來確定選擇了哪一個。然後在ContextMenuStrip上使用AutoScrollOffset將項目滾動到視圖中。

或者,您也可以使用舊的ContextMenu控件 - 它的項目有Select事件。

+0

CMS上的KeyPress事件不會觸發子菜單。 我可以捕獲ProcessDialogKey並選擇正確的元素,但在正確的元素上執行「select」不會向下滾動子菜單以顯示所選項目。 AutoScrollOffset似乎不適用於子菜單 – BrianH 2008-11-21 14:58:52

0

我遇到了這個問題。我不記得確切的解決方案(讓我知道如果你找不到它),但基本上,ToolStripMenu有一個'最頂級項目索引'屬性。

只需將新選擇的項目(例如4th'm')設置爲最頂級項目索引,WinForms將處理其餘項目。

祝你好運!

相關問題