2011-09-21 24 views
9

Sự khác biệt chính xác giữa Keys.Control và Keys.ControlKey/Keys.Shift và Keys.ShiftKey trong System.Windows.Forms là gì?Sự khác biệt chính xác giữa Keys.Control/Shift và Keys.ControlKey/ShiftKey là gì?

Tôi đã googled nó nhưng không có gì cụ thể xuất hiện, và nó dường như không được tài liệu trên MSDN hoặc.

Cá nhân, tôi luôn sử dụng Keys.Control/Keys.Shift, vì nó hoạt động tốt.


Chỉnh sửa: Sau khi đọc câu trả lời của KreepN, tôi nghĩ nếu bạn không bao giờ phải sử dụng Control/Shift, tại sao chúng trong khung công tác?

Ý tôi là, chúng thậm chí không phải là khóa vật lý, vì vậy tôi không thể thấy lý do tại sao Microsoft quyết định tạo chúng.

Có trường hợp nào tốt hơn khi sử dụng Kiểm soát/Shift không?

+1

Bạn sử dụng Keys.Control để kiểm tra xem người dùng có đang giữ phím Ctrl không. Để phát hiện Ctrl + C chẳng hạn. Bạn sử dụng Keys.ControlKey để phát hiện người dùng nhấn phím Ctrl. Điều đó là bất thường trừ khi bạn viết một trò chơi. –

Trả lời

6

Phím Control và ShiftKey (và Menu - bạn sẽ giả định là có tên AltKey) đại diện cho chính các khóa vật lý. Nói cách khác, chúng là các khóa "thực" và có thể được tìm thấy trong thuộc tính KeyCode của đối tượng KeyEventArgs .

Điều khiển, Shift và Alt, mặt khác, sẽ không bao giờ xuất hiện trong thuộc tính KeyCode , nhưng giá trị của chúng có thể được tìm thấy trong thuộc tính KeyData. Có vẻ như bạn không bao giờ thực sự sử dụng các hằng số này, vì khung đã kéo chúng ra cho bạn thông qua các thuộc tính Alt, Control và Shift của đối tượng KeyEventArgs, nhưng bạn CÓ THỂ sử dụng chúng để kiểm tra thuộc tính KeyData nếu bạn thực sự muốn.

Source with Examples.

Chỉnh sửa để chỉnh sửa của bạn:

Nhìn vào các giá trị được trả về khi "a" phím được nhấn:

một (unshifted)/41/41

A (Shift + một)/41/10041

Ctrl + a/41/20041

Các "keycode" trong trường hợp này là = 41 cho tất cả các từ bổ nghĩa. Bạn có thể sử dụng mã này nếu tất cả những gì bạn quan tâm là nút chính được nhấn, trong trường hợp này là "a".

Nếu bạn muốn có chức năng khác nhau dựa trên nếu một công cụ sửa đổi được nhấn, bạn sẽ cần phải cụ thể hơn và tham khảo trường "KeyData" và tìm số # biểu thị một công cụ sửa đổi nhất định. Trong trường hợp này "100" cho ca và "200" để điều khiển ở đầu trường.

Điều đó không có nghĩa là bạn không thể chỉ kiểm tra "41" ở cuối trường KeyData, nhưng tôi chưa bao giờ là người phàn nàn về sự tiện lợi.

Sẽ an toàn khi nói rằng "sự khác biệt" mà bạn đang tìm kiếm giữa chúng trong câu hỏi đầu tiên của bạn là chúng tham chiếu các trường thuộc tính khác nhau.

Chỉnh sửa để có mức độ liên quan bổ sung: Giá trị công cụ sửa đổi khóa được kết hợp với giá trị khóa tương quan trực tiếp với thành viên điều tra Lối tắt. Ví dụ: Shortcut.CtrlF8 (0x20077) giống như Keys.Control | Keys.F8 (0x20000 | 0x77)

Điều này có thể hữu ích khi xử lý các thuộc tính Shortcut đã xác định của các mục menu.

+0

Câu trả lời hay -> Được chấp nhận, nhưng đã thêm một phần vào câu hỏi và sẽ chấp nhận câu trả lời trả lời cả hai câu hỏi của tôi. – lesderid

+0

Làm rõ và giải thích, xin lỗi về điều đó. – KreepN

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