2013-02-12 23 views
13

Tôi có phương thức previewKeyDown trong cửa sổ của tôi và tôi muốn biết rằng phím được nhấn chỉ là A-Z chữ cái hoặc 1-0 số (không có bất kỳF1..12, enter, ctrl, alt etc - chỉ cần chữ cái hoặc số).Khóa WPF là số hoặc số

Tôi đã thử Char.IsLetter, nhưng tôi cần phải cung cấp cho các char, vì vậy e.key.ToString()[0] không hoạt động, bởi vì nó gần như mọi lúc một lá thư.

+0

Bạn có thể đặt một số mã để hiển thị những gì bạn dự định không? – Igoy

+0

Chìa khóa là chìa khóa chứ không phải là một nhân vật. – CodesInChaos

Trả lời

20

Something như thế này sẽ làm:

if ((e.Key >= Key.A && e.Key <= Key.Z) || (e.Key >= Key.D0 && e.Key <= Key.D9) || (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9)) 

Tất nhiên bạn cũng sẽ phải kiểm tra rằng không có các phím modifier như CTRL được ép theo yêu cầu của bạn.

+0

Điều đó hoạt động tốt, cảm ơn bạn. Bây giờ vấn đề khác - tập trung vào datagrid - trong mã tôi sử dụng một cái gì đó như: if (e.key == Key.Down || Key.Up) dataGrid.selectedIndex = 0; DataGrid.Focus(), nhưng bây giờ đẩy lên/xuống phím không thay đổi chỉ mục trong datagrid .. – user13657

+1

@AdamTruszkowski: Có lẽ đó là có nghĩa là 'e.Key == Key.Down || e.Key == Key.Up'? Trong bất kỳ trường hợp nào, hãy đặt câu hỏi riêng biệt thay vì đưa chúng vào các bình luận. – Jon

+0

Có, nó là e.Key == Key.Down || e.Key == Key.Down, nhưng bây giờ tôi muốn di chuyển lên/xuống trong datagrid khi lên/xuống được nhấn – user13657

0

Bạn có thể đặt một số mã để hiển thị những gì bạn dự định không? Không nên làm việc này cho bạn

 if(e.key.ToString().Length==1) 

    `Char.IsLetter(e.key.ToString()[0])` 
    else 

// 
+0

e.key.tostring() [0] - vì vậy khi tôi đẩy LeftCtrl - char là L là chữ cái, đó là lý do tại sao nó không hoạt động :) – user13657

11

e.Key được đem lại cho bạn một thành viên của enumSystem.Windows.Input.Key

Bạn sẽ có thể làm như sau để xác định xem nó là một lá thư hoặc một số:

var isNumber = e.Key >= Key.D0 && e.Key <= Key.D9; 
var isLetter = e.Key >= Key.A && e.Key <= Key.Z; 
0

Thêm tham chiếu đến Microsoft.VisualBasic và sử dụng hàm VB IsNumeric, kết hợp với char.IsLetter().

4

Trong trường hợp cụ thể của bạn câu trả lời cung cấp bởi JonJeffery có lẽ là tốt nhất, tuy nhiên nếu bạn cần phải kiểm tra chuỗi của bạn cho một số logic chữ cái/số khác thì bạn có thể sử dụng lớp KeyConverter để chuyển đổi một System.Windows.Input.Key thành một chuỗi

var strKey = new KeyConverter().ConvertToString(e.Key); 

Bạn vẫn sẽ cần phải kiểm tra xem có phím nào đang được giữ lại không (Shift, Ctrl và Alt) và cũng cần lưu ý rằng điều này chỉ hoạt động đối với Chữ cái và số. Ký tự đặc biệt (chẳng hạn như dấu phẩy, dấu ngoặc kép, v.v.) sẽ được hiển thị giống như e.Key.ToString()

+0

Không hoạt động trên các chữ số từ bàn phím số. – Paparazzi

2

hãy thử điều này, nó hoạt động.

private void txbNumber_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key >= Key.D0 && e.Key <= Key.D9) ; // it`s number 
     else if (e.Key >= Key.NumPad0 && e.Key <= Key.NumPad9) ; // it`s number 
     else if (e.Key == Key.Escape || e.Key == Key.Tab || e.Key == Key.CapsLock || e.Key == Key.LeftShift || e.Key == Key.LeftCtrl || 
      e.Key == Key.LWin || e.Key == Key.LeftAlt || e.Key == Key.RightAlt || e.Key == Key.RightCtrl || e.Key == Key.RightShift || 
      e.Key == Key.Left || e.Key == Key.Up || e.Key == Key.Down || e.Key == Key.Right || e.Key == Key.Return || e.Key == Key.Delete || 
      e.Key == Key.System) ; // it`s a system key (add other key here if you want to allow) 
     else 
      e.Handled = true; // the key will sappressed 
    } 
Các vấn đề liên quan