2013-08-14 72 views
6

Tôi có một mục Menustrip trên số Form của mình và nó đóng Form khi tôi nhấn vào nó. Tôi muốn làm cho phím tắt cho MenuStrip mục "ESC" của tôi, nhưng trong "ShorcutKey" cài đặt, nó không có một tùy chọn cho ESC, có cách nào tôi có thể làm cho nó làm điều đó nó là "ESC"? Tôi phải làm cho nó hiển thị trên mục MenuStrip rằng "ESC" là phím tắt.Bạn có thể thêm phím tắt ESC Key không?

Việc làm này không làm việc:

menuStripItem.ShortcutKeys = Keys.Escape; 
+2

Tình huống là gì? Bạn có thể tốt hơn với 'CancelButton'. – Ryan

Trả lời

6

Tôi không nghĩ rằng có một giải pháp trực tiếp vào đó, Bạn có thể sử dụng cách này, Đặt ShortcutKeyDisplayString trong mã

menuStripItem.ShortcutKeyDisplayString = "ESC"; 

Trong KeyDown sự kiện kiểm tra biểu mẫu nếu ESC được nhấn và Close() biểu mẫu.

+0

Tôi có một mã mà làm cho nó để tôi có thể nhấn phím ESC để đóng chương trình. Những gì tôi muốn làm là làm cho nó để nó cho thấy trong khu vực phím tắt, rằng phím tắt là ESC – Dozer789

+0

Cảm ơn bạn đã thử mặc dù. – Dozer789

+1

Sau đó, khi được hiển thị trong mã của tôi, bạn có thể đặt thuộc tính 'ShortcutKeyDisplayString' là' Escape'. Nếu bạn chỉ cần hiển thị ESC làm phím tắt. – Kurubaran

8

Winforms là cầu kỳ về phím tắt mà bạn chọn. Quy tắc là nó phải là một phím chức năng (F1-F12) hoặc một khóa khác với Keys.Control hoặc Keys.Alt được bao gồm. Mục đích lớn hơn ở đây là bạn không thể vô tình thay thế một khóa thông thường có thể được sử dụng trong, ví dụ: TextBox. Phím Escape thường hoạt động nút hủy của hộp thoại.

Keys.Escape khá đặc biệt; Alt + Escape và Ctrl + Escape không thể hoạt động vì chúng là các phím tắt chung trong Windows.

Vì vậy, bạn không thể sử dụng thuộc tính ShortcutKeys; bạn phải nhận ra phím Escape khác nhau. Dễ dàng thực hiện trong lớp Biểu mẫu của bạn bằng cách ghi đè phương thức ProcessCmdKey(). Dán mã này vào biểu mẫu của bạn:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) { 
    if (keyData == Keys.Escape) { 
     this.Close(); 
     return true; 
    } 
    return base.ProcessCmdKey(ref msg, keyData); 
} 
+2

Điều này sẽ làm việc để đóng nó, nhưng tôi đã có mã cho điều đó. Những gì tôi cần là làm cho nó hiển thị phím tắt. – Dozer789

+1

@ Dozer789 Ngay cả khi bạn có mã để đóng nó, mã này tốt hơn vì bạn có thể ngăn chặn quá trình khóa lệnh mặc định, 'ESC' là một khóa lệnh đặc biệt có thể hoạt động bất ngờ trong một số trường hợp. Vì vậy, chỉ cần vô hiệu hóa/ghi đè hành động mặc định sẽ tốt hơn. –

+0

Tôi có thể đang sử dụng mã này cho chương trình của mình, tôi không nhớ. Nếu tôi không, tôi có thể sẽ sử dụng mã này. – Dozer789

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