在matlab gui按空格键(un)检查复选框是否有焦点。如何关闭此行为?

时间:2017-06-29 22:06:15

标签: matlab user-interface checkbox hotkeys

我有一个带有指南的matlab gui,它有一个复选框uicontroll。当该复选框被聚焦时,按空格键(un)将选中该复选框。 我不想要这种行为 - 我怎么能把它关掉呢?

我想把它关闭,因为我已经为空格键定义了一个keypressFcn,当用户按下空格键时我想要其他的东西发生。那个'别的东西'工作中。如果空格键被击中,我的keypressFcn运行并执行它应该做的事情,另外复选框(un)检查。我只希望它执行我的keypressFcn,但是..

我真的不知道从哪里开始解决这个问题..只是一些通用方向说明已经有用了!

2 个答案:

答案 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按下后,虚拟对象将处于焦点状态。