我有一个带用户界面的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中设置了诸如标志和外部函数中的重要变量之类的其他内容,因此我需要该回调在按钮一个之前运行。
谢谢!
我就此问题与MATLAB支持人员联系,他们告诉我,按此顺序发生的回调确实是一个错误,并且已在2014b预发行版中修复。但是,要解决该错误,我设法进行了一些混乱的编码,以从“按钮回调”内部调用CellEditCallback,然后设置一个标志以确保“按钮回调”完成后,CellEditCallback不触发。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句