2014-03-25 95 views
2

我有一個ToolStripMenuItem,作爲連接到我的FormMenuStrip的下拉菜單。此菜單的內容根據表格其餘部分的狀態而改變,並填充到一個循環中。在循環中填充ShortcutKeys

問題是,現在我想添加功能,該菜單中的項目有一個基於他們在列表中的位置的鍵盤快捷鍵。列表中的第一個項目應該是Ctrl + 1,第二個Ctrl + 2等。

由於ShortcutKeys使用Keys enum設置我不知道如何將增量值映射到枚舉中的適當值。我希望像這樣的工作,但事實並非如此:

newToolStripMenuItem.ShortcutKeys = Keys.Control | (Keys.D0 + menuItemNumber++); 

編輯

有可能是別的事情上。根據this asker我的初步解決方案應該已經工作,並且由Migol提出的解決方案產生相同的結果。 ShortcutKeys中的值顯示爲一些奇怪的字符組合,沒有明顯的模式。

+0

您剛剛被調試器顯示的內容弄糊塗了。由於Keys枚舉具有[Flags]屬性,所以這會讓人感到困惑,這只是部分正確。繼續前進,你沒有真正的問題。 –

+0

可能重複[關於在C#winform覆蓋ProcessCMDKey](http://stackoverflow.com/questions/14561986/about-override-processcmdkey-in-c-sharp-winform) –

+0

@HansPassant啊是的,這是有道理的,但如果這兩種解決方案都顯示相同的東西,我可能設置正確,還有一些其他原因,爲什麼它不工作。哦,對於你的第二個評論,我的問題不在於我檢查價值。我不在乎它在代碼中的樣子,但它需要在按下按鍵時觸發事件。 – Fr33dan

回答

0

這是令人尷尬的,但問題完全無關,在這個帖子中提到的任何東西。這是我自己糟糕的編程習慣與拼寫錯誤相結合造成的一個愚蠢的錯誤。

在我原來的問題中,我將本地變量的名稱從processorToolStripMenuItem更改爲newToolStripMenuItem,因爲這樣做在應用程序的上下文中更有意義。我將它添加到的項目是一個名爲procesorToolStripMenuItem的字段,您可以看到它缺少's'。

對於設置鍵盤快捷方式的代碼行,我做了相同的打字錯誤,並因此設置了錯誤事物的鍵盤快捷方式。他們應該從來沒有被首先命名的東西如此相似。

1

您可以使用Enum.Parse方法是這樣的:

string enumName = "D" + menuItemNumber++; 
newToolStripMenuItem.ShortcutKeys = Keys.Control | (Keys)Enum.Parse(typeof(Keys), enumName); 

Enum.Parse documentation

+0

那麼我的字符串將是「D」+ menuItemNumber ++在這種情況下,但我開始懷疑有更多的事情比滿足眼睛,因爲這給了我的想法,顯然這[asker](http ://stackoverflow.com/q/3096757/1111886)。 – Fr33dan

+0

@ Fr33dan您的解決方案有一個重大挫折 - 它包含幻數,它很難理解。 – Migol

+0

我不知道你的魔法數字是什麼意思,但我認爲這是一個有點棘手的理解。無論哪種方式,因爲他們產生相同的結果我的問題不能在設置的價值,而是別的東西。我認爲這可能與表單打開後設置鍵盤快捷鍵有關,但我仍在調查。 – Fr33dan