2011-09-23 64 views
5

Tôi đã thử sử dụng các sự kiện KeyUp và KeyDown để đọc đầu vào bàn phím nhưng ngay sau khi tôi đặt các điều khiển khác trên Winform, các phím không được đọc. Làm cách nào để đảm bảo rằng các phím được đọc?Làm cách nào để đọc đầu vào bàn phím trên Winform?

+0

Ý của bạn là nó hoạt động cho các hình thức trống và không làm việc nếu có một kiểm soát? – Yuan

+0

Có, như được viết trong các câu trả lời bên dưới, nó hoạt động cho các nút điều khiển như nút, hộp văn bản, v.v. nhưng khi tôi đặt Điều khiển người dùng, nó sẽ ngừng hoạt động. – Bildsoe

+0

Nó không phải là công việc, đầu vào bàn phím đi đến sự kiểm soát với tiêu điểm. Bạn đang thực sự * cố gắng làm gì? –

Trả lời

4

Bạn có thể đặt KeyPreview = true trên biểu mẫu của mình để nắm bắt các sự kiện bàn phím.

EDITED để cho bạn hiểu:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.A) 
     e.SuppressKeyPress = true; 
} 

mẫu ngốc tiếp nhận các sự kiện bàn phím và thả nếu A được nhấn.
Nếu tiêu điểm nằm trong hộp văn bản, bạn sẽ thấy văn bản đó được viết chứ không phải A !!

CHỈNH SỬA LẠI: Tôi lấy mã này từ ví dụ VB.NET.
Trong điều khiển người dùng của bạn, hãy sử dụng sự kiện "Nhấn phím" của hộp văn bản để tăng "sự kiện điều khiển người dùng".
Mã này sẽ là trong usercontrol tuỳ chỉnh của bạn:

'Declare the event 
Event KeyPress(KeyAscii As Integer) 

Private Sub Text1_KeyPress(KeyAscii As Integer) 
    RaiseEvent KeyPress(KeyAscii) 
End Sub 
+0

Điều này không hiệu quả, tôi vẫn không đăng ký bất kỳ đầu vào nào. – Bildsoe

+0

@Bildsoe: Tôi đã thử và nó hoạt động. Bạn nên nắm bắt các sự kiện 'KeyDown' và' KeyUp' trên biểu mẫu: bạn sẽ nhận được chúng, hãy chắc chắn. Nếu không đăng mã của bạn xin vui lòng, vì có gì đó sai ... – Marco

+0

ok cảm ơn, tôi sẽ cố gắng hơn, tôi phải làm điều gì sai. Tôi có một điều khiển người dùng trên biểu mẫu của tôi, điều này có thay đổi gì không? – Bildsoe

2

Vì marco nói hãy đặt KeyPreview thành true trên biểu mẫu của bạn để nắm bắt các sự kiện chính trong toàn bộ biểu mẫu thay vì chỉ là điều khiển.

Sử dụng sự kiện KeyPress ... KeyUp/Down dành cho khung công tác nhiều hơn mã của bạn. KeyDown là tốt nếu bạn muốn vô hiệu hóa một phím ... trường số duy nhất vv Nói chung KeyPress là một trong những bạn đang sau.

Nếu bạn muốn ngăn chặn các thao tác gõ từ việc đẩy lùi đến các điều khiển khác, hãy đặt KeyPressEventArgs.Handled = true.

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress(v=VS.90).aspx

Bạn đã kết nối trình xử lý sự kiện chưa?

MyForm.KeyDown += MyHandler; 

Bạn cũng có thể làm điều này trong các thuộc tính pane ... nhấp vào biểu tượng sự kiện ...

+0

Tôi cần cả lên và xuống. Tôi muốn hình dung các phím được nhấn, do đó, một cái gì đó cần phải xảy ra cả trên keyUp và keyDown. – Bildsoe

+0

Tôi hiểu rồi ... KeyUp/Down sẽ hoạt động giống như vậy. Bạn đã kết nối các trình xử lý sự kiện chưa? Hoặc trong ngăn thuộc tính trong phần sự kiện hoặc trong mã? MyForm.KeyDown + = MyEventHandler; – iDevForFun

+0

Có, tôi đã kết nối bộ xử lý sự kiện. Nó hoạt động, nhưng không phải nếu tôi đặt một điều khiển người dùng trên biểu mẫu thì nó ngừng hoạt động. – Bildsoe

0

Nếu bạn đang tìm kiếm mẫu của bạn thân để đọc các đầu vào bàn phím, bạn đã có câu trả lời của bạn từ các phóng viên khác. Tôi đang thêm đóng góp này cho khả năng bạn có thể muốn thêm xử lý khóa vào các điều khiển khác hoặc các điều khiển người dùng trên biểu mẫu của bạn. Bài viết của tôi Exploring Secrets of .NET Keystroke Handling được xuất bản trên DevX.com (than ôi, nó yêu cầu đăng ký nhưng miễn phí) cung cấp cho bạn một cuộc thảo luận toàn diện về cách thức và lý do tại sao tất cả các móc khóa và sự kiện quan trọng khác nhau được phát huy. Hơn nữa, bài viết bao gồm một tiện ích "Keystroke Sandbox" để tải xuống miễn phí thực sự cho phép bạn xem các điều khiển nào đang nhận các sự kiện xử lý khóa nào.

Dưới đây là một trong những minh họa từ bài viết để kích thích sự thèm ăn của bạn:

enter image description here

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