在MATLAB菜单中使用Enter作为加速器
我正在MATLAB中构建GUI,目前正在使用在MATLAB菜单中使用Enter作为加速器,matlab,callback,matlab-figure,acceleratorkey,Matlab,Callback,Matlab Figure,Acceleratorkey,我正在MATLAB中构建GUI,目前正在使用uimenu添加自定义菜单。我正在尝试为不同的菜单操作添加不同的加速器 我发现在uimenu(见下文)中将char(10)(换行符)作为加速器字符传递给matlab会将Ctrl+Enter添加为该菜单的加速器标签。问题是,当我点击Ctrl+Enter时,它不会运行回调 你知道为什么这样不行吗?我错过什么了吗?“运行当前区段”的Ctrl+Enter是否取消我的通话?在这种情况下,我可以覆盖它吗 例子 MATLAB如何不接受Ctrl+Enter funct
uimenu
添加自定义菜单。我正在尝试为不同的菜单操作添加不同的加速器
我发现在uimenu
(见下文)中将char(10)
(换行符)作为加速器字符传递给matlab会将Ctrl+Enter
添加为该菜单的加速器标签。问题是,当我点击Ctrl+Enter
时,它不会运行回调
你知道为什么这样不行吗?我错过什么了吗?“运行当前区段”的Ctrl+Enter
是否取消我的通话?在这种情况下,我可以覆盖它吗
例子
MATLAB如何不接受Ctrl+Enter
function test
close all
f=figure;
m=uimenu(f,'Label','test');
uimenu(m,'Label','a','callback',@hittest,'Accelerator','r');
uimenu(m,'Label','b','callback',@hittest,'Accelerator',char(10));
function hittest(h,~)
disp(h.Label)
end
end
如前所述,主应用程序似乎已注册此加速器,因此阻止GUI拦截此调用 您可以尝试在中更改MATLAB的键盘快捷键。请注意,这只会影响MATLAB的安装 如果在
-nodesktop
模式下启动MATLAB,则这将阻止MATLAB IDE启动IDE,并应释放加速器供您使用
matlab -nodesktop
由于您提到这将是一个已部署的应用程序,因此您可以始终使用isdeployed
检查它是否作为已部署的应用程序运行,如果不是,则可以使用备用键盘快捷键,这样您就不必在没有IDE的情况下连续启动MATLAB
if ~isdeployed
% Use some other keyboard shortcut for testing
set(hmenu, 'Accelerator', <some other key for testing>)
else
% Use the enter key on deployed applications
set(hmenu, 'Accelerator', char(10))
end
你的回调错误被排除了,但这对我在OSX上是有效的。你能试着在没有桌面的情况下运行MATLAB来确认你的怀疑吗?还有什么版本和操作系统?版本:9.0.0.370719(R2016a)操作系统:Microsoft Windows 7企业版6.1(Build 7601:Service Pack 1)我将尝试运行无窗口并返回!好的,只要我在
-nodesktop
模式下运行它,它对我也适用。我想这很好,因为当我完成它时,它将被部署。你知道即使在桌面模式下也能让它工作吗?我怀疑在桌面模式下也没有一个好方法。应用程序似乎在很低的级别劫持了该快捷方式。好吧,太糟糕了。我对stackexchange还很陌生,这里的正确操作是什么?删除我的帖子或回答我自己的问题,让别人在将来看到?
if usejava('desktop')
% Use some other keyboard shortcut for testing
set(hmenu, 'Accelerator', <some other key for testing>)
else
% Use the enter key on deployed applications
set(hmenu, 'Accelerator', char(10))
end