ユーザーが値を編集できる uitable を備えた GUI があります。そのテーブルには、ユーザーがセルの編集中に Enter キーを押すか、セルの外側をクリックするたびにセルの入力エラーをトリガーしてチェックする CellEditCallback 関数があります。それはうまく機能しますが、そのテーブルのデータを使用するプッシュボタンもあり、現在の問題は、セルの外側の他の場所がクリックされる前、またはそのために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 で設定されるため、そのコールバックが必要なため、コールバックをこの順序でトリガーする必要があります。押しボタンの前に実行します。
ありがとう!