1

ユーザーが値を編集できる 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 で設定されるため、そのコールバックが必要なため、コールバックをこの順序でトリガーする必要があります。押しボタンの前に実行します。

ありがとう!

4

1 に答える 1