2011-06-27 76 views
4

我怎麼能轉換鍵(按鍵在KeyEventArgs)爲一個字符串。鍵(ENUM)字符串

例如,如果用戶輸入 「 - 」:

e.Key.ToString() = "Subtract" 
new KeyConverter().ConvertToString(e.Key) = "Subtract" 

我想要的是讓 「 - 」 號的結果,而不是 「減去」 ......

+0

我不明白你想要做什麼。這不是有效的C#代碼。 – Amy

+5

對於那些(像我)需要看這件事:http://msdn.microsoft.com/en-us/library/system.windows.input.keyeventargs.key.aspx –

+2

@Inuyasha他試圖找到一種方法將返回標準鍵帽/字形/符號的關鍵,而不是** **枚舉名字,這將是更詳細。目的很明確,海事組織。 –

回答

7

使用Dictionary<TKey, TValue>

類級別:

private readonly Dictionary<string, string> operations = new Dictionary<string, string>; 

public ClassName() { 
    // put in constructor... 
    operations.Add("Subtract", "-"); 
    // etc. 
} 

在你的方法,只需使用operations[e.Key.ToString()]來代替。

編輯:實際上,對於更多的效益:

private readonly Dictionary<System.Windows.Input.Key, char> operations = new Dictionary<System.Windows.Input.Key, char>; 

public ClassName() { 
    // put in constructor... 
    operations.Add(System.Windows.Input.Key.Subtract, '-'); 
    // etc. 
} 

在你的方法,只需使用operations[e.Key]來代替。

+0

爲什麼不使用'詞典'? – svick

+0

@svick:當你說出來的時候,我正在做這個改變:) – Ryan

+0

這可能比'switch-case'更好......我想我會因爲推薦一個'Dictionary ' – IAbstract

4

該帖子生成「減」,因爲Key返回KeyCode枚舉,其中Subtract是成員。

沒有一個明確的映射,有沒有辦法得到一個「 - 」出了這一點。 (對於顯式映射,使用一個開關,if/else語句,字典,或任何你喜歡:-)

要獲得字符而不是關鍵代碼,或者用不同的事件?

快樂編碼

+0

什麼不同的事件? – Melursus

-1

您可以使用說明的屬性,然後覆蓋的ToString()得到「 - 」而不是名稱。下面是說明如何做到這一點http://blogs.msdn.com/b/abhinaba/archive/2005/10/20/c-enum-and-overriding-tostring-on-it.aspx

+0

非常有趣的文章。你知道這種技術是否可以應用於現有類型? – 2011-06-27 20:21:06

+0

當然。你只需要訪問tp來添加描述屬性 – boca

+0

啊。這個枚舉是.NET的一部分,儘管:( – 2011-06-27 20:28:17

1

你可以使用這樣的功能的物品:

public static string KeycodeToChar(int keyCode) 
{ 
    Keys key = (Keys)keyCode; 

    switch (key) 
    { 
     case Keys.Add: 
      return "+"; 
     case Keys.Subtract: 
      return "-"; //etc... 
     default: 
      return key.ToString(); 
    } 
} 
2

那麼,你可以使用強制轉換,如果你想轉換一個鍵對象到字符串對象,像這樣:

string key = ((char)e.Key).ToString(); 

只要記住一個Keys對象可以接受char轉換,所以我們可以將生成的char對象轉換爲一個字符串對象。 如果你只想把它添加到一個char對象,只是刪除的垃圾,並使其像這樣:

char key = (char)e.key; 
+0

)你可以,但它沒有幫助。Key-Enum值和字符集值之間的雙射映射根本不可能,因爲碰撞(Key.NumPad0和Key.D0有有不同的值,但都應該導致字符'0')實際上,Key-Enum的整個映射不同於任何字符集,只需在Visual Studio中按下Key-Enum中的F12並說服自己 – 0xDEADBEEF

+0

He想要將Keys對象的值作爲字符串獲取,而不是相反,所以我可以在這裏看到沒有問題@ 0xDEADBEEF –