Sự khác biệt giữa KeyDownvà KeyPresssự kiện trong là .netgì?
Sự khác biệt giữa KeyDownvà KeyPresssự kiện trong là .netgì?
Câu trả lời:
Rõ ràng có rất nhiều hiểu lầm về điều này!
Sự khác biệt thực tế duy nhất giữa KeyDownvà KeyPresslàKeyPress chuyển tiếp ký tự kết quả từ một phím bấm và chỉ được gọi nếu có.
Nói cách khác, nếu bạn nhấn Atrên bàn phím, bạn sẽ nhận được chuỗi sự kiện này:
Nhưng nếu bạn nhấn Shift+ A, bạn sẽ nhận được:
Nếu bạn giữ phím trong một thời gian, bạn sẽ nhận được một cái gì đó như:
Lưu ý rằng KeyPressxảy ra ở giữa KeyDown và KeyUp, không phải sau đó KeyUp, như nhiều câu trả lời khác đã nêu, KeyPresskhông được gọi khi một ký tự không được tạo và đó làKeyDown được lặp lại trong khi phím được giữ, cũng trái với nhiều câu trả lời khác .
Ví dụ về các khóa không trực tiếp dẫn đến các cuộc gọi đến KeyPress:
Ví dụ về các phím đó làm kết quả trong các cuộc gọi đến KeyPress:
Đối với người hiếu, KeyDownđại khái tương quan với WM_KEYDOWN, KeyPressđể WM_CHAR, và KeyUpđể WM_KEYUP. WM_KEYDOWN có thể được gọi ít hơn số lần lặp lại khóa, nhưng nó sẽ gửi số đếm lặp lại, mà IIRC, WinForms sử dụng để tạo chính xác một KeyDown mỗi lần lặp lại.
ProcessDialogKeyvà trả về sai khi keyDatalà Keys.Tabhoặc Keys.Shift | Keys.Tab, thì bạn sẽ thấy phím Tab trong Phím (Bật) (Xuống | Nhấn | Lên).
Sự kiện KeyPress không được đưa ra bởi các khóa không phải là vi khuẩn; tuy nhiên, các khóa không phải là vi khuẩn làm tăng các sự kiện KeyDown và KeyUp.
http://msdn.microsoft.com/en-us/l Library / system.windows.forms.control.keypress.aspx
KeyPress chỉ được kích hoạt bởi các ký tự có thể in và được kích hoạt sau sự kiện KeyDown. Tùy thuộc vào cài đặt độ trễ gõ, có thể có nhiều sự kiện KeyDown và KeyPress nhưng chỉ có một sự kiện KeyUp.
KeyDown
KeyPress
KeyUp
KeyPress là mức độ trừu tượng cao hơn KeyDown (và KeyUp). KeyDown và KeyUp có liên quan đến phần cứng: hành động thực tế của một phím trên bàn phím. KeyPress là "Tôi đã nhận được một ký tự từ bàn phím".
Từ MSDN:
Các sự kiện chính xảy ra theo thứ tự sau:
Hơn nữa, KeyPress cho bạn cơ hội tuyên bố hành động là "đã xử lý " để ngăn hành động đó làm bất cứ điều gì.
Handledkhông hoạt động đối với KeyUp ( SuppressKeyPresscũng không hoạt động).
Tôi đã luôn nghĩ rằng việc tắt phím xảy ra ngay khi bạn nhấn phím xuống, nhấn phím là hành động nhấn phím và nhả phím.
tôi tìm thấy điều này mang lại một chút giải thích khác nhau: http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Keydown đang nhấn phím mà không giải phóng nó, Keypress là một chu trình nhấn và phát hành hoàn chỉnh.
Nói cách khác, KeyDown + KeyUp = Nhấn phím
Từ nhà phát triển blog :
Để hiểu được sự khác biệt giữa phím tắt và phím bấm, rất hữu ích để hiểu sự khác biệt giữa "ký tự" và "phím" . Một "chìa khóa" là một nút vật lý trên bàn phím của máy tính, trong khi một "nhân vật" là một biểu tượng gõ bằng cách nhấn một nút. Về lý thuyết, các sự kiện keydown và keyup đại diện cho các phím được nhấn hoặc phát hành, trong khi sự kiện nhấn phím đại diện cho một ký tự được gõ. Việc thực hiện lý thuyết là không giống nhau trong tất cả các trình duyệt.
Lưu ý: Bạn cũng có thể dùng thử Key Event Tester (có sẵn trên trang web nói trên) để hiểu khái niệm này.
KEYUP sẽ chỉ được ghi lại một lần, khi phát hành phím được nhấn, bất kể phím đó sẽ được giữ trong bao lâu, vì vậy nếu bạn muốn chụp như vậy chỉ một lần, KEYUP là sự kiện phù hợp để chụp.
KeyPresskiện này được nêu ra cho mọi ký tự được tạo từ đầu vào, cả khi phản ứng với các lần nhấn phím vật lý cũng như khi ký tự là kết quả của tính năng autorepeat. Làm thế nào Bàn phím Nhập hoạt động tài liệu hành vi này.
Giải thích dễ nhất:
Tôi giữ phím 'd' trong một giây rồi thả ra.
bánh bao
sự kiện keydown đã xảy ra một lần trước khi d đầu tiên xuất hiện trên màn hình, sự kiện nhấn phím đã xảy ra 6 lần và sự kiện keyup xảy ra sau khi d cuối cùng xuất hiện trên màn hình.