在 matlab gui 中,按空格键 (un) 选中复选框是否聚焦.如何关闭此行为?



我有一个带有指南的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后,虚拟将聚焦。

最新更新