2010-08-26 18 views

cevap

0

klavye kısayollarını yapmak Control.KeyPress olayını işlemek ve tuş kombinasyonunu inceleyebilirsiniz:

4

Ben senin yolu kopyalama ve yapıştırma işi gibi Control ? tip kısayolları uygulamaya çalışırken varsayıyorum?

Her forma eklediğiniz jenerik bir KeyDown ve KeyUp işleyicisini oluşturabilirsiniz. Her zaman bir KeyDown anahtarını bir listede saklayın (bir anahtarı basılı tutun ve diğerine çarpmak için). Listeye anahtar eklediğinizde, kısayol tuş kombinasyonlarınızdan herhangi birini içeren listeyi kontrol edin. Eğer öyleyse ihtiyacınız olan kodu çalıştırınız. Her KeyUp etkinlik için

, listeden çıkarmadan emin olun (yalnızca KeyDown eklemeler üzerinde kısayol için kontrol edilmesi gereken

DÜZENLEME:. hızlı bir arama yaptım ve bu aynı çözüm uygulamaya bulundu:

biz adını bilmeyen o kötü sitesinde olduğu gibi
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>(); 
} 

Bu here alıntı olduğunu tam çözüm görebilirsiniz (sadece altına gidin.

1

Böyle şeyler genellikle windows kancaları kullanılarak yapılır. Ebeveyninizin formu kullanıcı alt formları açmak için seçer düğmeleri veya menüler varsa, bir ve işareti ekleyerek çok basit bir kısayol tuşu ekleyebilirsiniz

http://msdn.microsoft.com/en-us/magazine/cc188966.aspx

0

: Burada onlarla çalışmak nasıl gösteren bir MSDN makale .Text özniteliğine &.

Örneğin, Options gibi bir düğmeniz varsa, metnini aşağıdaki gibi değiştirebilirsiniz: &Options. Bunu yapmak, üst formdaki düğmeyi Alt + O yapacaktır.

Alternatif kısayol tuşlarını isterseniz gibi Ctrl + O bir form açmak için, ana formun KeyDown olaya abone ve bu tuş kombinasyonunu aramak gerekir:

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

Formunuzun KeyPreview özelliğini true olarak ayarlamanız gerekebileceğini unutmayın.

Son olarak, araç şeridi menü öğeleri, özellikler panelinde tanımlayabileceğiniz bir ShortcutKeys özelliğine sahiptir ve VS, menü öğesini etkinleştirmek için klavye kısayolunu desteklemek için gerekli kodu otomatik olarak Designer dosyasına ekler.

0

Adım No.1

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

cevabınızı genişletmek Lütfen

 KeyPreview = True; 

Adım No.2 ayarlayın. –

İlgili konular