代码之家  ›  专栏  ›  技术社区  ›  Anton Rodenhauser

在matlab gui中,按空格键(un)会选中一个复选框(如果它已聚焦)。我如何才能关闭这种行为?

  •  1
  • Anton Rodenhauser  · 技术社区  · 7 年前

    我不想要这种行为-我怎么能关掉它?

    我真的不知道从哪里开始解决这个问题。只要一些通用的全方位说明就已经很有用了!

    2 回复  |  直到 7 年前
        1
  •  2
  •   Zep    7 年前

    当我遇到类似问题时,我破解了按键FCN以绕过空格键:

    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
    

    空格键仍在工作,但您已将复选框设置回其原始值!

        2
  •  1
  •   Xiangrui Li    7 年前

    我也有类似的问题。我的解决方案是设置一个虚拟uicontrol(类似于带有空字符串的文本样式),并且在任何uicontrol回调中,我总是调用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键,它将循环合格的uicontrol,如果焦点位于复选框上,空格键将再次更改其值。我的解决方案是在按键FCN中执行uicontrol(虚拟),以便在按下制表符后虚拟将处于焦点。