2009-09-29 51 views
2

我在窗口上使用PreviewKeyDown事件來接收條形碼掃描器中的所有密鑰。 KeyEventArgs是一個枚舉,並沒有給我實際的字符串。我不想使用TextInput,因爲某些鍵可能會被控件本身處理,並且可能不會冒泡到TextInput事件。將PreviewKeyDown中接收到的密鑰轉換爲字符串

我正在尋找一種方法將我在PreviewKeyDown中獲得的Keys轉換爲實際的字符串。 我看着InputManager,TextCompositionManager等,但我沒有找到一種方法,我給出的鍵列表,它返回一個字符串。 TextCompositionManager或其他東西必須將這些Keys轉換爲TextInput中可用的字符串。

+0

任何人有什麼請嗎? – RRR 2009-09-30 04:31:38

回答

1

這是我正在使用的事件。 KeyDown獲取鍵值,PreviewTextInput獲取實際文本。所以鍵之間的某個地方正在轉換爲文本。

​​
+0

.NET框架返回KeyUp/KeyDown事件上的原始掃描代碼簡直是「不可能」(就像「太令人震驚」)。那麼我們該怎麼辦?改爲使用'PreviewTextInput'事件。我們得到這個鍵的字符串表示形式,像這樣:void KeyboardNavigation(object sender,TextCompositionEventArgs e){string typedChar = e.Text; }' – 2010-09-25 21:39:15

-3

好的,從this post被盜。

[DllImport("user32.dll")] 
static extern short VkKeyScan(char ch); 

static public Key ResolveKey(char charToResolve) 
{  
    return KeyInterop.KeyFromVirtualKey(VkKeyScan(charToResolve)); 
} 
+0

e因爲PreviewKeyDownEventArgs給出編譯錯誤。 KeyEventArgs不能轉換爲PreviewKeyDownEventArgs – RRR 2009-09-30 14:54:53

+0

我想在這裏幫助你,但你需要給我更多的信息。你可以添加事件定義,或者通過MSDN鏈接到這個問題? – Gregory 2009-09-30 23:14:59

+0

我不能發表評論中的所有內容。所以我把它發佈在下面的答案中。 – RRR 2009-10-01 18:19:25

1

鍵 - >文本轉換比你想象的要複雜得多,實際上是沒有辦法單次擊鍵映射到單個字符,因爲某些語言中,有些情況下,你需要多按鍵組成單字符。

由於您對條形碼掃描儀的輸入感興趣(我認爲它只會生成windows可以處理的一小部分,可能只有ASCII可能更少),您可以自己構建轉換表並將其硬編碼到您的程序 - 處理Windows文本處理的所有瘋狂(爲了好玩,查找「死鑰匙」)要容易得多。