2012-02-26 45 views
8

KeyboardState.GetPressedKeys() trả về một mảng Key của các phím hiện đang được nhấn. Thông thường để tìm hiểu xem một khóa là một chữ cái hoặc số tôi sẽ sử dụng Char.IsLetterOrDigit(char) nhưng loại đã cho là của số đếm Keys và kết quả là không có tài sản KeyChar.Làm thế nào để xác định xem một khóa là một chữ cái hoặc số?

Truyền không hoạt động vì, ví dụ: các phím như Keys.F5, khi được đúc thành một ký tự, trở thành chữ cái t. Trong trường hợp này, F5 sau đó sẽ được xem như là một chữ cái hoặc chữ số khi rõ ràng là không.

Vì vậy, làm cách nào để xác định xem giá trị đếm Keys nhất định có phải là chữ cái hoặc chữ số, cho rằng việc truyền tới một ký tự mang lại kết quả không thể đoán trước?

+0

Bạn muốn F5 được gắn cờ là một chữ cái hoặc một số? – Dharun

+1

Hãy xem tại đây http://stackoverflow.com/questions/5718541/check-if-keys-is-letter-digit-special-symbol – Kamil

+0

@SwearWord: Không. Vấn đề là khi 'Keys.F5' được đúc thành một ký tự, nó trở thành 't'. 'Keys.F5' sẽ thất bại trong việc kiểm tra * là chữ cái hoặc số *. –

Trả lời

12
public static bool IsKeyAChar(Keys key) 
{ 
    return key >= Keys.A && key <= Keys.Z; 
} 

public static bool IsKeyADigit(Keys key) 
{ 
    return (key >= Keys.D0 && key <= Keys.D9) || (key >= Keys.NumPad0 && key <= Keys.NumPad9); 
} 
+0

Và còn nghèo 'ä' thì sao? – CodesInChaos

+2

Không thể tìm thấy nó trong liệt kê Khóa (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.input.keys.aspx) – max

0

Có bảng/bộ HashSets của riêng bạn để ánh xạ Keys liệt kê các loại bạn quan tâm.

Chỉ có khoảng 100 giá trị khác nhau - vì vậy bảng sẽ không quá lớn. Nếu bạn lo lắng về kích thước trong bộ nhớ - nó là một byte cho mỗi giá trị đếm (nếu sử dụng một mảng byte được lập chỉ mục bởi giá trị Keys).

2

Vì "các phím số" tương ứng với các phạm vi cụ thể trong điều tra Keys, bạn có thể kiểm tra xem khóa của bạn có thuộc về bất kỳ phạm vi nào không?

Keys[] keys = KeyboardState.GetPressedKeys(); 
bool isDigit = keys.Any(key => 
    key >= Keys.D0  && key <= Keys.D9 || 
    key >= Keys.NumPad0 && key <= Keys.NumPad9); 
Các vấn đề liên quan