2011-12-21 34 views
5

Tôi đang gặp một số khó khăn sử dụng các phím ghi nhớ trong Windows Forms:Accelerator (key mnemonic) được thực hiện mà không cần nhấn phím ALT

Đơn giản chỉ cần có một hình thức với một nút, trong đó sử dụng ALT + s là tốc:

this.searchButton = new System.Windows.Forms.Button(); 
this.searchButton.Text = "&search"; 

Hành động nút được thực hiện bằng cách nhấn "s" (không nhấn phím ALT). Tôi đã kiểm tra một số ứng dụng khác và thao tác tăng tốc chỉ được thực thi khi nhấn phím ALT.

  • Đây có phải là sự cố .NET không?
  • Làm cách nào để giải quyết vấn đề này?

Xin cảm ơn trước.

+0

Bạn đang sử dụng phiên bản .NET nào? – leanne

+0

@leanne: Đó là .NET 2.0 nhưng, tôi cũng đã thử nghiệm .NET 3 và .NET 3.5 và .NET 4.0 cũng không thành công. –

+0

+1 bởi vì tôi vừa trải qua cùng một vấn đề và câu hỏi này rất hữu ích! Nhưng về mặt kỹ thuật nó là một "chìa khóa nhớ" không phải là một phím tăng tốc tôi nghĩ? – MarkJ

Trả lời

2

Đây là hành vi bình thường đối với .NET ("theo thiết kế", họ nói).

Đây là một bài viết mà nên giúp đỡ với vấn đề của bạn - không đơn giản hoặc khá để bắt đầu với, nhưng một khi nó được thực hiện, bất kỳ phím tắt bạn thiết lập có thể dễ dàng thêm:

Building Keyboard Accelerators into .NET Windows Forms Applications - Code Guru

Về cơ bản , giải pháp này liên quan đến việc tạo một lớp, tải một bảng băm và ghi đè ProcessCmdKey để thiết lập trình xử lý tăng tốc của riêng bạn.

5

Bạn có thể thay đổi hành vi này bằng cách dán đoạn mã này vào mẫu của bạn:

protected override bool ProcessDialogChar(char charCode) { 
     if ((Control.ModifierKeys & Keys.Alt) == Keys.None) return false; 
     return base.ProcessDialogChar(charCode); 
    } 

Không phải 100% chắc chắn điều này sẽ không có tác dụng phụ khác, xử lý trong Winforms bàn phím là phức tạp để đặt nó nhẹ.

+3

Cảm ơn, tôi đã làm ProcessMnemonicChar ghi đè giống nhau trong các điều khiển nhận được acceleratos. –

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