当用户按住控制键并按下数字窗口上的回车键时,我想捕获.注意:这是编辑器中"评估当前部分"的默认键.
请参阅以下示例代码:
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
Run Code Online (Sandbox Code Playgroud)
要重现将上述内容保存在编辑器中的活动文件中并运行该功能 - 编辑器需要打开(这很重要!!).
在数字激活时按任意键 - >所选键被写入终端窗口.但是,如果按住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
Run Code Online (Sandbox Code Playgroud)
我可以让它工作的唯一方法是在启动GUI时关闭所有编辑器文件,然后在GUI关闭时再次打开它们(这不是一个可接受的解决方案...... - 出于相当明显的原因!!) …