2016-06-21 32 views
0

我正在使用這樣的掃描器發送條形碼:「¬00111111111112222222」與按鍵一樣,例如USB鍵盤。我需要做的就是每當我得到前綴「¬」時,將焦點設置在TextBox上。一種比較特殊字符的方法

現在的問題是,在我的KeyDown事件中,KeyEventArgs是「系統」而不是我的前綴中的字符。有沒有辦法比較這個標誌來設置焦點?

我試過的代碼是:

private void KeyDownEvent(object sender, KeyEventArgs e) 
{ 
    if (Convert.ToString(e.Key) == "¬") 
    { 
     myTextBox.Focus(); 
    } 
} 

更新: 我試過e.SystemKey現在,在這一點上,我得到左Alt作爲事件的說法。所以也許AISCII代碼轉換爲這個SystemKey LeftAlt?

更新: 我記錄了掃描條形碼時得到的所有密鑰,並注意到我沒有像我想的那樣獲取ASCII碼。我得到的是使這個符號成爲「Alt + NumPad0 + NumPad7 + NumPad2」的關鍵組合,所以現在我只需要將它們與來自「¬」符號的ASCII代碼相匹配,然後它就可以工作。感謝所有的幫助..

+0

KeyInterop.VirtualKeyFromKey(e.Key)怎麼辦? – Majestic

+0

不,它保持爲空 – Teroman

+0

您確定您的掃描儀正在返回KeyDown事件嗎?通常情況下,KeyEventArgs e應該包含所按鍵的細節。 KeyDown事件如何在沒有任何觸發的情況下觸發?有什麼方法可以得到整個字符串或什麼? – ViVi

回答

0

嘗試讀取串行輸入緩衝區(串行通信示例)並解析字符串以檢查特殊字符。 檢查這裏: http://www.codeproject.com/Articles/678025/Serial-Comms-in-Csharp-for-Beginners

OR 你可以只取ASCII值,並比較某一特定數值或範圍。 例如, 小於65或大於126.

+0

我不確定,但我認爲你的第一條建議只適用於Comport,對吧?但是,我只有USB。 我試過第二個,但問題似乎是KeyEventArgs正在將整個字符更改爲LeftAlt。 我意識到的另一件事是,如果我將文本寫入文本框中,我可以從TextBox.Text獲取正確的字符,因此它必須臨時保存真正按下的鍵。也許我可以閱讀這個Cach的內容。 – Teroman

+0

我試過rs232 rs422和usb的第一個選項。無處不在的作品。但是,你可以嘗試任何你覺得有希望的事情。 –

+0

這個解決方案中的大問題是我正在使用WPF而不是Windows窗體。可悲的是,我的KeyEventArgs上沒有KeyChar屬性。我也沒有其他屬性顯示KeyEventArgs的ASCII碼。 – Teroman

相關問題