控件上的Windows窗体键盘快捷键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了控件上的Windows窗体键盘快捷键相关的知识,希望对你有一定的参考价值。
Easily create Windows Forms Shortcuts with this class.For example: A shortcut to catch pasting via Ctrl + V.
Shortcut sc = new Shortcut(this, new Action(() => MessageBox.Show("Data pasted!")));
sc.Keys.Add(Keys.ControlKey);
sc.Keys.Add(Keys.V);
using System; using System.Collections.Generic; using System.Windows.Forms; namespace Tools { /// <summary> /// Tasten-Shortcut auf einem Control. /// </summary> public class Shortcut { /// <summary> /// Aktuell gedrückte Tasten. /// </summary> private Control _Control; private Action _Action; /// <summary> /// Control, auf dem die Tastendrücke überwacht werden sollen. /// </summary> public Control Control { get { return _Control; } set { this.OnControlChanging(); _Control = value; this.OnControlChanged(); } } /// <summary> /// Keys, die gedrückt werden müssen, um die Aktion auszulösen. /// </summary> public List<Keys> Keys { get { return _Keys; } } /// <summary> /// Aktion, die ausgelöst werden soll. /// </summary> public Action Action { get { return _Action; } set { _Action = value; } } /// <summary> /// Initialisiert einen einen Tasten-Shortcut. /// </summary> public Shortcut() { } /// <summary> /// Initialisiert einen einen Tasten-Shortcut. /// </summary> /// <param name="control">Control, auf dem die Tastendrücke überwacht werden sollen.</param> public Shortcut(Control control) { this.Control = control; } /// <summary> /// Initialisiert einen einen Tasten-Shortcut. /// </summary> /// <param name="control">Control, auf dem die Tastendrücke überwacht werden sollen.</param> /// <param name="action">Aktion, die ausgelöst werden soll.</param> public Shortcut(Control control, Action action) { this.Control = control; this.Action = action; } /// <summary> /// Wird aufgerufen, wenn sich die Control-Eigenschaft gerade ändert. /// </summary> protected virtual void OnControlChanging() { // Abonnements der alten Key-Events entfernen if (this.Control != null) { } } /// <summary> /// Wird aufgerufen, wenn die Control-Eigenschaft geändert wurde. /// </summary> protected virtual void OnControlChanged() { // Neue Key-Events abonnieren if (this.Control != null) { } } /// <summary> /// Überprüft, ob die aktuell gedrückten Tasten dem Shortcut entsprechen. /// </summary> protected void CheckKeys() { bool flag = true; foreach (Keys key in this.Keys) { if (!_CurrentlyPressedKeys.Contains(key)) flag = false; } if (flag) this.Action(); } /// <summary> /// Wird aufgerufen, wenn eine Taste auf dem Control gedrückt wurde. /// </summary> private void Control_KeyDown(object sender, KeyEventArgs e) { // Aktuell gedrückte Taste speichern _CurrentlyPressedKeys.Add(e.KeyCode); // Auf Shortcut überprüfen this.CheckKeys(); } /// <summary> /// Wird aufgerufen, wenn eine Taste auf dem Control losgelassen wurde. /// </summary> private void Control_KeyUp(object sender, KeyEventArgs e) { // Losgelassene Taste entfernen _CurrentlyPressedKeys.Remove(e.KeyCode); } } }
以上是关于控件上的Windows窗体键盘快捷键的主要内容,如果未能解决你的问题,请参考以下文章