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

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

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

为了回答键盘和弦的问题,我不相信现在有一个现成的选项可供你使用.

但是,它应该是简单的模型.我会创建一个单一的类,或者KeyboardChordProvider.在表单层面需要知道键盘事件.如其他地方所述,Form.KeyPreview属性必须为true.该供应商可能已经足够订阅Form.KeyPress事件.如果您在表单中传递,您可以在提供程序的构造函数中执行所有这些操作.

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

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

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

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

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

我认为这个设计会达到你想要的目的.

相关文章

(1)when you ping a computer from itsafe,the ping command should return the local IP address. (...
1、点击win菜单,点击设置图标 2、选择系统选项 3、选择应用与程序选项 4、拉到最下方,选择程序与功能...
目前一直直接往Windows 2008 R2 Server中复制文件(暂时还没有搭建ftp服务),突然不能复制了,于是百度...
windows下使用vscode配合xebug调试php脚本 要下载有php_xebug.dll扩展的版本,最新版可能没有这个扩展,p...
在控制面板的程序与功能里启用和关闭windows功能打开,适用于linux的windows子系统
效果演示 推荐一个非常牛的文档网站生成器:docsify 我通过这个工具,成功将码云上的个人学习笔记发布到...