我有一个带有指南的matlab gui,它有一个复选框uicontroll。当该复选框聚焦时,按空格键(取消(会选中该复选框。 我不想要这种行为 - 我怎样才能关闭它?
我想关闭它,因为我为空格键定义了一个按键Fcn,并且我希望当用户按下空格键时发生其他事情。 ATM "其他东西"正在工作。如果点击空格键,我的按键Fcn将运行并执行它应该执行的操作,此外还会检查复选框(取消(。不过,我只希望它执行我的按键Fcn。
我真的不知道从哪里开始解决这个问题..只是一些一般的方向说明已经很有帮助了!
当我遇到类似的问题时,我破解了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
空格键仍在工作,但您将复选框设置回其原始值!
我也有类似的问题。我的解决方案是设置一个虚拟的uicontrol(就像一个带有空字符串的文本样式(,在任何uicontrol回调中,我总是调用uicontrol(dummy(来聚焦虚拟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,如果焦点位于复选框上,空格键将再次更改其值。我的解决方案是在按键Fcn中执行uicontrol(虚拟(,因此在按TAB后,虚拟将聚焦。