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