我想在用户按住控制键并按下数字窗口上的回车键时捕获。注意:这是编辑器中“评估当前部分”的默认键。
请参阅下面的示例代码:
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支持,这是“预期行为!”。我可以(几乎)看到为什么它可能是演示的好主意 - 但对于在Matlab中运行的专业应用程序,我个人认为这个“功能”是一个错误!!
注释
我已经尝试过很多方法来解决这个问题,但没有一个工作,例如隐藏编辑器或设置编辑器启用状态为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中的新附加功能中。 - 世界各地的人们都在使用它。
P.S。感谢您阅读这篇文章! :)
答案 0 :(得分:0)
为什么不去home> Preferences > keyboard > Shortcut
并在那里更改?
你只需要点击页面顶部黑框中的Ctrl + Enter
来搜索相关命令,这就是评估当前部分并随意改变它。
请记住,你只需要拆开你的窗户(取消它们)。然后,当您点击Ctrl + Enter
时,它会执行您想要的任何操作。
我希望你觉得这个答案很有帮助。
答案 1 :(得分:0)
您可以从我的FEX提交中尝试解决方案。 KbTimer的动力是需要捕获键盘笔划而不需要由GUIDE或APP DESIGNER设计的GUI。请注意,功能的实现是受基于MEX的PsychToolbox的启发。