[英]How to make keyboard shortcuts in .NET
我在C#/ .NET中有一個Windows應用程序。 我需要制作一些鍵盤快捷鍵來在不同的表單之間導航。 如何在.NET中創建鍵盤快捷鍵?
您可以使用P / Invoke 在系統上注冊全局熱鍵 。 如果您不想要全局的東西,您可以隨時處理所有表單中的KeyPress事件。
我假設你試圖實現Control ?
類似於復制和粘貼工作方式的快捷方式?
您可以創建附加到每個表單的通用KeyDown
和KeyUp
處理程序。 每次你得到一個KeyDown
存儲鍵列表中的鍵( KeyDown
按住鍵並擊中另一個鍵)。 每次向列表添加密鑰時,請檢查列表是否包含任何快捷鍵組合。 如果是,請執行您需要的任何代碼。
對於每個KeyUp
事件,請確保從列表中刪除(您只需要檢查KeyDown
添加的快捷方式。
編輯:快速搜索,發現同樣的解決方案實施:
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>();
}
你可以看到這里引用的完整解決方案(只是滾動到底部,因為它位於那個我們不會說出名字的邪惡網站上。
這些東西通常使用Windows鈎子完成。 這是一篇MSDN文章,展示了如何使用它們:
第1步
KeyPreview = True;
第2步
if (e.Alt && e.KeyCode == Keys.C)
{
//your function
}
您可以處理Control.KeyPress事件並檢查組合鍵以生成鍵盤快捷鍵: http : //msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
如果你的父窗體具有用戶選擇打開子表單按鈕或菜單,您可以通過添加符號添加一個非常簡單的熱鍵&
對。文本屬性。
例如,如果您有一個按鈕(如Options
,則可以按如下方式更改其文本: &Options
。 這樣做將使Alt + O激活父表單中的按鈕。
或者,如果您希望熱鍵(如Ctrl + O)打開表單,則必須訂閱主表單的KeyDown
事件,並查找該組合鍵:
private void FormMain_KeyDown(object sender, KeyEventArgs e)
{
if (ModifierKeys == Keys.Control && e.KeyCode == Keys.O))
// open form
}
請注意,您可能需要將表單的KeyPreview
屬性設置為True。
最后,工具條菜單項具有可在屬性面板中定義的屬性ShortcutKeys
,VS將自動將所需代碼添加到Designer文件以支持鍵盤快捷方式以激活菜單項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.