C# /. NET'te bir Windows uygulamasına sahibim. Farklı formlar arasında gezinmek için bazı klavye kısayolları yapmam gerekiyor. .NET'te klavye kısayollarını nasıl yapabilirim?.NET'teki klavye kısayolları nasıl yapılır?
cevap
P/Invoke özelliğini register a global hotkey on the system'a kullanabilirsiniz. Küresel bir şey istemiyorsanız, KeyPress olaylarını her zaman tüm formlarınızda işleyebilirsiniz.
klavye kısayollarını yapmak Control.KeyPress olayını işlemek ve tuş kombinasyonunu inceleyebilirsiniz:
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 gibiclass 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.
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
: 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.
Adım No.1
if (e.Alt && e.KeyCode == Keys.C)
{
//your function
}
cevabınızı genişletmek Lütfen
Adım No.2 ayarlayın. –