1

我有一个 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 中设置了外部函数中的标志和重要变量等其他内容,因此我需要该回调在按钮一之前运行。

谢谢!

4

1 回答 1

0

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

于 2014-07-21T19:08:51.250 回答