小编mat*_*gui的帖子

Matlab控件+输入图上的键

当用户按住控制键并按下数字窗口上的回车键时,我想捕获.注意:这是编辑器中"评估当前部分"的默认键.

请参阅以下示例代码:

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中运行的专业应用程序,我个人认为这个"功能"是一个错误!

笔记

  1. 当编辑器关闭时,控制+输入被捕获在图中
  2. 在已部署的应用程序中,捕获控件+输入.
  3. 如果我手动更改"评估当前部分"快捷方式,则会捕获控件+输入.

我已经尝试了很多方法来解决这个问题,但没有一个工作,例如隐藏编辑器或设置编辑器启用状态为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关闭时再次打开它们(这不是一个可接受的解决方案...... - 出于相当明显的原因!!) …

keyboard matlab keyboard-shortcuts enter

10
推荐指数
1
解决办法
637
查看次数

标签 统计

enter ×1

keyboard ×1

keyboard-shortcuts ×1

matlab ×1