我有一个带有指南的matlab gui,它有一个复选框uicontroll。当该复选框被聚焦时,按空格键(un)将选中该复选框。 我不想要这种行为 - 我怎么能把它关掉呢?
我想把它关闭,因为我已经为空格键定义了一个keypressFcn,当用户按下空格键时我想要其他的东西发生。那个'别的东西'工作中。如果空格键被击中,我的keypressFcn运行并执行它应该做的事情,另外复选框(un)检查。我只希望它执行我的keypressFcn,但是..
我真的不知道从哪里开始解决这个问题..只是一些通用方向说明已经有用了!
答案 0 :(得分:2)
当我遇到类似问题时,我攻击了KeyPressFcn以绕过空格键:
function test_KeyPressFcn
% Create a figure
figure();
% Add a check box with a KeyPressFcn callback, which will be called when the user preses a key
uicontrol('Style' , 'checkBox','KeyPressFcn' , @KeyPressed);
function KeyPressed(src , event)
if strcmpi(event.Key , 'space')
% Pressing the spacebar changed the value of the checkbox to
% new_value
new_value = get(src , 'Value');
% Let's revert it to its old value
set(src , 'Value' , ~new_value)
end
空格键仍然有效,但您将复选框设置回其原始值!
答案 1 :(得分:1)
我有类似的问题。我的解决方案是设置一个虚拟uicontrol(就像一个带有空字符串的文本样式),并且在任何uicontrol CallBack中,我总是调用uicontrol(虚拟)来使虚拟uicontrol聚焦,因此空格键按下将不起作用。这听起来不太好,但对我来说效果很好。
dummy = uicontrol(gcf, 'Style', 'text'); % use this for focus
ckbox = uicontrol(gcf, 'Style', 'CheckBox', 'String', 'myCheckBox', ...
'Callback', @(h,e)uicontrol(dummy), 'Position', [100 200 100 32]);
如果您现在单击该复选框,它将更改其值,并且回调会将焦点移至虚拟文本,因此空格键将不再更改其值。
如果用户可以按TAB键,它将循环符合条件的uicontrols,如果焦点位于复选框上,空格键将再次更改其值。我的解决方案是在KeypressFcn中进行uicontrol(虚拟),因此在TAB按下后,虚拟对象将处于焦点状态。