在按钮回调之前触发CellEditCallback

时间:2014-07-11 18:14:25

标签: matlab callback matlab-uitable

我有一个用户可以编辑值的GUI。我有一个CellEditCallback函数用于触发和检查单元格中的输入错误,只要用户在编辑单元格时按Enter键或单击单元格外。这很好用,但我也有一个按钮,它使用该表中的数据,我当前的问题是,当点击单元外的任何其他点之前单击按钮时,或者在按下Enter之前,按钮回调运行首先,在回调完成之后,CellEditCallback运行。这不太理想,因为我需要在计算中使用数据之前检查错误。那么,有没有人对如何首先运行CellEditCallback函数有任何想法?

此代码产生了我遇到的问题:

% If you edit a cell and immediately click the button before clicking
% outside the cell or before hitting enter, the button's callback triggers
% before the CellEditCallback

function temp
% Create Figure
mainFig = figure('Units','characters',...
    'Position',[45 5 200 50],...
    'Renderer','opengl');

% Create uitable
tempData(1:10,1:5) = {''};
mainTable = uitable('parent',mainFig,...
    'Units','characters',...
    'Position',[5 25 180 20],...
    'ColumnEditable',[true],...
    'ColumnFormat',{'char'},...
    'ColumnWidth',{150 150 150 150 150},...
    'Data',tempData,...
    'CellEditCallback',@enterDataCallback);

% Create Button
mainButton = uicontrol('Parent',mainFig,...
    'Units','characters',...
    'Position',[5 10 180 10],...
    'Style','pushbutton',...
    'String','Button',...
    'Callback',@buttonCallback);

    % Function for when cell data is edited
    function enterDataCallback(src,evt)
        disp('Cell Edited')
    end

    % Function for when a button is pressed
    function buttonCallback(src,evt)
        disp('Button Pressed')
    end
end

注1:我确实尝试过使用uiwait和waitfor,但问题不在于CellEditCallback函数被中断,它只是在按钮回调后被触发。

注2:这是对函数执行操作的一个非常基本的描述,但我确实需要回调按顺序触发,因为在CellEditCallback中设置了外部函数中的标志和重要变量等其他内容所以我需要让回调在按钮之前运行。

谢谢!

1 个答案:

答案 0 :(得分:0)

我联系MATLAB支持人员解决了这个问题,他们告诉我,按顺序发生的回调确实是一个错误,它在2014b预发布中得到修复。但是,为了解决这个错误,我设法做了一些杂乱的编码,从Push Button Callback中调用CellEditCallback,然后设置一个标志,以确保在按钮回调完成后CellEditCallback不会触发。