2011-09-06 45 views
11

Tôi đang mã hóa trình chỉnh sửa văn bản tùy chỉnh và tôi sử dụng các sự kiện KeyDown và KeyUp. Sự kiện đó nhận được một KeyEventArgs từ các tham số trong đó một cá thể "Key" được bao gồm.Lấy Char từ Key

Làm cách nào tôi có thể chuyển đổi "Khóa" đó thành một thẻ thực sự?

Sử dụng khóa. ToString() bằng dấu "." Tôi nhận được một "OmePeriod" hoặc với "," Tôi nhận được một "OmeComma". Tôi có thể chuyển đổi các giá trị đó trực tiếp ... nhưng đó là một công việc khó khăn, và tôi chắc chắn rằng phải tồn tại bất kỳ lớp nào chuyển đổi các Khóa đó thành "char" thực sự.

Cảm ơn!

Trân trọng.

+1

Nó đã được thảo luận đã http://stackoverflow.com/questions/7103360/how-to-get-pressed-char-from-system-windows-input-keyeventargs – Samich

+0

Tôi nghĩ rằng câu trả lời cho http: // stackoverflow.com/questions/544141/how-to-convert-a-character-in-to-equivalent-system-windows-input-key-enum-value câu hỏi có thể giúp đỡ. – Dmitriy

+0

Có thể trùng lặp [C# Cách dịch mã khóa ảo sang char?] (Http://stackoverflow.com/questions/318777/c-sharp-how-to-translate-virtual-keycode-to-char) – bummi

Trả lời

3

Vấn đề chính ở đây là sự kiện bạn đang bắt là sự kiện bàn phím quay và chìa khóa thực sự là chìa khóa và KHÔNG phải là một nhân vật. Ở giữa là sơ đồ bàn phím! Ví dụ: khi nhập shift-A, bạn sẽ nhận được hai sự kiện thay vì một sự kiện để nhấn phím.

cuộc thảo luận này có thể giúp: C# How to translate virtual keycode to char?

3

Thay vì sử dụng các sự kiện KeyDown, hãy thử sử dụng các sự kiện TextInput. Đính kèm trình xử lý sự kiện giống như sau:

private void Grid_TextInput(object sender, TextCompositionEventArgs e) 
{ 
    Char keyChar = (Char)System.Text.Encoding.ASCII.GetBytes(e.Text)[0]; 
    Debug.WriteLine(keyChar); 
} 

Lưu ý, điều này chỉ lấy byte đầu tiên và điều này sẽ không hoạt động cho văn bản quốc tế (Unicode). Nó có thể không hoạt động cho các sự kiện nhập văn bản phức tạp hơn, vì vậy hãy thông báo!

Xem this MSDN article để biết thêm thông tin.

+0

có nhiều câu hỏi để chụp textinput trong wpf, một số câu trả lời thậm chí còn đề cập đến các dll hệ thống. Nhưng câu trả lời của bạn là đến nay là tốt nhất tôi đã nhìn thấy cho đến nay – jflepp

-4

Cast e.KeyValue để char. như ví dụ:

ví dụ:

private void myTextBox_KeyDown(object sender, KeyEventArgs e) 
{ 
    char pressedCharacter = (char)e.KeyValue; 
} 
+0

Không có e.KeyValue – MSL

+0

Đây là những gì tôi đã theo đuổi vì mục đích của tôi. Cảm ơn bạn đã trả lời hữu ích! –

+0

Tôi chỉ nhận ra rằng điều này có thể trả về kết quả xấu và có lẽ không nên được sử dụng ở tất cả. Khi tôi sử dụng, tôi nhấn phím 'NumberPad 8' và nó xuất hiện như KeyData và KeyCode với KeyValue là' 104'. Khi sử dụng '(char) e.KeyValue', giá trị' 104' chuyển thành ký tự 'h' và NOT' 8'! –

Các vấn đề liên quan