当用户按住控制键并按下数字窗口上的回车键时,我想捕获 . 注意:这是编辑器中“评估当前部分”的默认键 .
请参阅以下示例代码:
function test
f = figure;
f.KeyPressFcn = @myKeyPressFcn;
end
function myKeyPressFcn ( hFig, event )
cm = hFig.CurrentModifier();
if ~isempty ( cm )
fprintf ( 'CurrentKey: %s:%s\n', cm{1}, hFig.CurrentKey );
else
fprintf ( 'CurrentKey: %s\n', hFig.CurrentKey );
end
end
要重现将上述内容保存在编辑器中的活动文件中并运行该功能 - 编辑器需要打开(这很重要!!) .
在数字激活时按任意键 - >所选键被写入终端窗口 . 但是,如果按住Control并按下回车键(返回),则不会捕获,而是Matlab会尝试在编辑器中“评估当前部分”(或以前调用的单元格)(无论图中是否有焦点) . 这当然是错误的......
我已经联系了Matlab支持,这是"expected behaviour!" . 我可以(几乎)看到为什么它可能是演示的好主意 - 但对于在Matlab中运行的专业应用程序,我个人认为"feature"是一个错误!
笔记
-
编辑器关闭时,控制输入将在图中捕获
-
在已部署的应用程序中,捕获控件输入 .
-
如果我手动更改“评估当前部分”快捷方式,则会捕获控件输入 .
我已经尝试了很多方法来解决这个问题,但没有一个工作,例如隐藏编辑器或设置编辑器启用状态为false(这些都不是可接受的解决方案 - 我试图看看我可以在一个小测试上工作案件...):
function test
desktop = com.mathworks.mde.desk.MLDesktop.getInstance;
jEditor = desktop.getGroupContainer('Editor').getTopLevelAncestor;
jEditor.setVisible(false);
jEditor.setEnable(false);
f = figure
f.KeyPressFcn = @myKeyPressFcn;
uiwait(f);
jEditor.setVisible(true);
jEditor.setEnable(true);
end
我可以让它工作的唯一方法是在启动GUI时关闭所有编辑器文件,然后在GUI关闭时再次打开它们(这不是一个可接受的解决方案...... - 出于相当明显的原因!!)
我确实考虑过暂时修改“评估当前部分”的快捷键(首选项 - 键盘 - 快捷键) - >但是还没有找到从命令行执行此操作的方法,然后在完成时再次将其设置回来 . 如果速度很快,您可以在用户按下并释放控制键时执行此操作 .
那么我要问的是:
如果可能的话,我需要一个适用于任何地方的解决方案 - 就好像我可以使用它,它将被包含在my Matlab GUI Toolbox中的新附加功能中 . - 世界各地的人们都在使用它 .
-
您知道如何从命令行修改键盘快捷键 - 如果是这样的话!
-
还有其他建议吗?
-
我的另一个想法是将我的快捷方式更改为不同的组合键 - 但这很有趣! :)(如果某个用户某处已将当前单元格的执行更改为我的新组合,我仍会遇到问题...)
附:感谢您阅读这篇文章! :)
1 回答
你为什么不去
home> Preferences > keyboard > Shortcut
并在那里改变它?你只需要在页面顶部的黑框中点击
Ctrl + Enter
来搜索相关的命令,在这里评估当前部分并随意更改它 .请记住,你只需要拆开你的窗户(取消它们) . 然后,当您单击
Ctrl + Enter
时,它将执行您想要的任何操作 .我希望你觉得这个答案很有帮助 .