2010-08-26 59 views

Trả lời

5

Bạn có thể sử dụng P/Gọi đến register a global hotkey on the system. Nếu bạn không muốn một cái gì đó toàn cầu, bạn luôn có thể xử lý các sự kiện KeyPress trong tất cả các biểu mẫu của bạn.

0

Bạn có thể xử lý các sự kiện Control.KeyPress và kiểm tra việc tổ hợp phím để làm phím tắt:

4

tôi giả cố gắng của bạn để thực hiện Control ? loại các phím tắt như các bản sao cách và dán làm việc?

Bạn có thể tạo bộ xử lý chung là KeyDownKeyUp mà bạn đính kèm vào từng biểu mẫu. Mỗi khi bạn nhận được KeyDown lưu khóa trong danh sách (để giữ tài khoản và nhấn phím khác). Mỗi khi bạn thêm khóa vào danh sách, hãy kiểm tra xem danh sách của bạn có chứa bất kỳ tổ hợp phím tắt nào không. Nếu như vậy thực hiện bất kỳ mã nào bạn cần.

Đối với mỗi sự kiện KeyUp, hãy chắc chắn bạn đang loại bỏ khỏi danh sách (bạn chỉ cần kiểm tra xem có các phím tắt trên KeyDown bổ sung

EDIT:. Đã làm một tìm kiếm nhanh chóng và tìm thấy giải pháp này cùng thực hiện:

class KeyboardShortcuts 
{ 
    public static void Window_KeyDown(object sender, System.Windows.Input.KeyEventArgs e) 
    { 
     if (m_keysDownList.Contains(e.Key) == false) 
     { 
      m_keysDownList.Add(e.Key); 
      Debug.WriteLine(e.Key.ToString() + " Down"); 
     } 

     CheckForKeyCombos(); 
    } 

    public static void Window_KeyUp(object sender, System.Windows.Input.KeyEventArgs e) 
    { 
     m_keysDownList.Remove(e.Key); 
     Debug.WriteLine(e.Key.ToString() + " Up"); 
    } 


    public static void CheckForKeyCombos() 
    { 
     if (m_keysDownList.Contains(System.Windows.Input.Key.LeftCtrl)) 
     { 
      if (m_keysDownList.Contains(System.Windows.Input.Key.A)) 
      { 
       if (m_keysDownList.Contains(System.Windows.Input.Key.C)) 
       { 
        // Clear list before handeling (Dialogue boxes 
        // can hinder the listening for key up events, leaving 
        // keys in list - so clear first). 
        ClearKeysDownList(); 

        // Handle Ctrl + A + C Combo 
        HandleCtrlACCombo(); 
       } 
      } 
     } 
    } 

    private static void ClearKeysDownList() 
    {    
     m_keysDownList.Clear(); 
    } 

    public static void HandleCtrlACCombo() 
    { 
     if (handleCtrlACComboDelegate != null) 
     { 
      handleCtrlACComboDelegate(); 
     } 
    } 

    // Need a delegate instance for each combo 
    public delegate void HandleCtrlACComboDelegate(); 
    public static HandleCtrlACComboDelegate handleCtrlACComboDelegate; 

    private static List<System.Windows.Input.Key> m_keysDownList = new List<System.Windows.Input.Key>(); 
} 

Bạn có thể thấy các giải pháp đầy đủ mà điều này được trích dẫn từ here (chỉ cần cuộn xuống phía dưới vì nó là trên trang web đó ác mà chúng ta không nói tên của.

0

Nếu hình thức cha mẹ của bạn có các nút hoặc menu mà người sử dụng chọn để mở các hình thức phụ, bạn có thể thêm một phím nóng rất đơn giản bằng cách thêm một dấu & đến thuộc tính .Text.

Ví dụ: nếu bạn có nút như Options, bạn có thể thay đổi văn bản như sau: &Options. Làm như vậy sẽ làm cho Alt + O kích hoạt nút từ biểu mẫu gốc.

Ngoài ra nếu bạn muốn phím nóng như Ctrl + O để mở một biểu mẫu, bạn sẽ phải đăng ký sự kiện dưới hình thức chính của KeyDown, và tìm kiếm rằng tổ hợp phím:

private void FormMain_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (ModifierKeys == Keys.Control && e.KeyCode == Keys.O)) 
      // open form 
    } 

Lưu ý rằng bạn có thể cần phải đặt thuộc tính KeyPreview của biểu mẫu thành True.

Cuối cùng, mục menu dải công cụ có thuộc tính ShortcutKeys mà bạn có thể xác định trong bảng thuộc tính và VS sẽ tự động thêm mã được yêu cầu vào tệp Designer để hỗ trợ phím tắt để kích hoạt mục menu.

0

Bước No.1 thiết

 KeyPreview = True; 

Bước số 2

 if (e.Alt && e.KeyCode == Keys.C) 
     { 
      //your function 
     } 
+0

Hãy mở rộng câu trả lời của bạn. –

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