Я полагаю, вы пытаетесь реализовать ярлыки типа Control ?
, например, как копировать и вставлять?
Вы можете создать общий обработчик KeyDown
и KeyUp
, который вы прикрепляете к каждой форме. Каждый раз, когда вы получаете 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>();
}
Вы можете увидеть полное решение, которое цитируется здесь здесь (просто прокрутите вниз, так как именно на этом злом сайте мы не произносим имя.