当前位置:  开发笔记 > 编程语言 > 正文

如何在Windows窗体应用程序中创建复合键盘快捷方式?

如何解决《如何在Windows窗体应用程序中创建复合键盘快捷方式?》经验,为你挑选了1个好方法。

我想创建一个组件,允许我们使用与任意命令相关联的复合键盘快捷键,如Visual Studio IDE和Microsoft Office.

也就是说,键盘快捷键由一系列多次击键组成,例如Ctrl+ W+ C.在Visual Studio中,这将打开类视图.当按下第一组键(Ctrl+ W)时,按下"(Ctrl + W)消息.等待和弦的第二个键......"出现在状态栏中.



1> Drew Noakes..:

在具体回答键盘和弦的问题时,我不相信现在有一个现成的选项供您使用.

但是,它应该足够简单来建模.或许,我会创建一个单独的类KeyboardChordProvider.它需要知道表单级别的键盘事件.如其他地方所述,Form.KeyPreview财产必须是true.这个提供者订阅该Form.KeyPress事件可能就足够了.如果您传入表单,则可以在提供程序的构造函数中执行所有这些操作.

您需要向提供商注册潜在的击键.

在内部,此实例将跟踪当前状态.每当观察到表示和弦的第一个键的击键时,您将更新提供者的状态并引发事件,以便订阅者可以设置文本:(CTRL + W)被按下.等待和弦的第二把钥匙......

如果下一个击键与潜在的辅助选项匹配,那么您有一个匹配并且可以引发ChordPressed包含所输入笔画细节的事件.或者,您可能只是调用在和弦注册时提供给提供者的特定回调(以避免在ChordPressed事件处理程序中使用switch语句或其他一些调度).

如果在任何时候击键与潜在的下一个选项不匹配,那么您将重置提供者的状态.

在提供程序内部,您可以使用树结构对可能的击键进行建模.提供者的当前状态只是一个特定的树节点.开始时,根节点将处于活动状态.如果孩子匹配击键,那么它将成为预期下一个笔划的当前节点.如果孩子是一个叶子节点,那么整个和弦已匹配,你会引发ChordPressed事件(传递让你到达那一点的笔画链)或调用存储在叶子中的回调.每当没有击键与孩子匹配时,重置回使根节点激活.

我认为这个设计可以达到你想要的效果.

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有