2016-03-24 7 views
2

Bir tuşa basmaya çalışıyorum, onu bir dizeye dönüştürüyorum, daha sonra dizeyi orijinal tuşa basma int değerine dönüştürüyorum. Neden bazı anahtarlar, bir kez dizelere dönüştürülür, özgün anahtar kodlarına geri dönmezler?

bu var varsayalım:

KeysConverter kc = new KeysConverter(); 

string keyChar = kc.ConvertToString((System.Windows.Forms.Keys)e.KeyCode); 
int key = (int)e.KeyCode; 

Debug.WriteLine(e.KeyCode + " " + (int)e.KeyCode); 

Key tempkey; 
Enum.TryParse(keyChar, out tempkey); 

Debug.WriteLine(tempkey + " " + (int)tempkey); 

Her şey iyi çalışıyor gibi görünüyor.

Test durumda: F5

Çıkış: F5 116 F5 116

Test durumda: '(Oemtilde)

Çıkış: Oemtilde 192 Oemtilde 192

Test durumda: X

Örneğin

Çıktı: X 88 X 88

iyi gibi görünüyor ... Sonra

yapmam bu:

Test durumda: 1

Çıktı: D1 49 Lbutton 1

Neden bazı tuşlar orijinal değerlerine dönmüyor?

1,2,3, ..., 9,0, Ekle, Page Down, Page Up Sil

Düzenleme::

Noteable tuşları o ile çalıştı henüz test durumda: 1 (klavyenin sağ tarafındaki tuş takımında)

Çıktı: NumPad1 97NumPad1 97

+0

Tuş takımında size sorun veren anahtarlar var mı? –

+0

Sadece listelediğim (1,2,3, ..., 9,0, Ekle, Sil, Sayfa Aşağı, Page Up) bana sorun verenler. Klavyenin sağ tarafındaki tuş takımı bir sorun oluşturmaz. * * ''/'Işaretleri bile iyidir – John

cevap

1

Kodunuz bir TEMELLERİ vardır l hata. KeysConverter anahtarı bir dizeye dönüştürür, bu nedenle Keys.D1 (üst satırdaki 1 anahtarının kodu), anahtarın gösterdiği gibi "1" dizesine dönüştürür. Enum.TryParse bunu anlamayı deniyor, ancak Keys.1 etiketi (açıkçası) yoktur, bu yüzden dizeyi "1" sayısal değeri olarak çevirir. (Keys) 1, gerçekten Keys.LButton'dur.

Bu gidiş dönüş dönüşümünde neyi başarmaya çalıştığınızdan emin değilim, bu nedenle kodunuzu nasıl düzeltebileceğimi bilmiyorum, ancak gördüğünüz şeyi açıklıyor.

+0

Bir e.'1' tuşu için KeyCode, int 'değerine, sonra dize adına nasıl dönüştürür ve sonra bu dizgeyi' int' değerine dönüştürürsünüz? – John

+0

@John: Bunu, "Keys.D9" ile "Keys.D0" arasındaki değeri düzgün bir şekilde sırayla açarak yapabilirsiniz. Ama bu dönüşüm ilk etapta gerekli görünmüyor, çünkü '49' tuşu ''' '' '' '' '' '' '' '' '' '' 'tuşlar want olarak isterseniz, sadece (Tuşlar) 49', ya da sorunuzun kodunda yapabilirsiniz. '(Keys) e.KeyCode'. Ve eğer anahtar kodunu açık bir şekilde temsil eden bir dize istiyorsanız, sadece sayısal değeri - 'e.KeyCode.ToString() ') dönüştürün. –

+0

Ahhhh. E.KeyCode.ToString() 'sadece bir demet bana yardımcı oldu. Çok takdir edilir. Teşekkür ederim. – John

İlgili konular