ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

コールバック間のデータ共有

データの共有方法の概要

多くのアプリには、相互に依存するコントロール、メニュー、グラフィックス オブジェクトが含まれます。各コールバック関数はそれぞれ固有のスコープをもつので、この関数にアクセスする必要があるアプリの部分ごとに明示的にデータを共有しなければなりません。次の表で、アプリ内でデータを共有するための方法をいくつか説明します。

方法説明要件とトレードオフ
UserData またはその他のオブジェクト プロパティへのデータの格納

コンポーネント オブジェクトを使用して、直接プロパティ値を取得または設定します。

すべての UI コンポーネントには、任意の MATLAB® データを格納できる UserData プロパティがあります。

  • プロパティを設定または取得するには、そのコンポーネントにアクセスできる必要があります。

  • UserData が一度に保持できる変数は 1 つのみですが、複数の値を struct 配列または cell 配列として格納できます。

アプリケーション データとしてのデータの格納

関数 setappdata を使用して、特定のコンポーネントにデータを関連付けます。後で関数 getappdata を使用して、そのコンポーネントにアクセスできます。

  • アプリケーション データを設定または取得するには、そのコンポーネントにアクセスできる必要があります。

  • 複数の変数を共有できます。

入れ子にされたコールバック関数の作成 (プログラム アプリ)

メイン関数の内部でコールバック関数を入れ子にします。これにより、コールバック関数がメイン関数内のすべての変数にアクセスできます。

  • コールバック関数は、メイン関数と同じファイル内にコーディングする必要があります。

  • GUIDE アプリには推奨しません。

  • 複数の変数を共有できます。

関数 guidata によるデータの格納

関数 guidata を使用して、データを Figure ウィンドウと共有します。

  • 任意の UI コンポーネントを使用してデータの格納や取得を行います。

  • 一度に格納できる変数は 1 つのみですが、複数の値を struct 配列または cell 配列として格納できます。

UserData またはその他のオブジェクト プロパティへのデータの格納

UI コンポーネントのプロパティには、役立つ情報が含まれています。たとえば、Value プロパティをクエリすると、スライダーの現在の位置がわかります。さらに、すべてのコンポーネントに UserData プロパティがあり、ここに任意の MATLAB 変数を格納できます。コールバック関数がコンポーネントにアクセスできる限り、すべてのコールバック関数は UserData プロパティに格納された値にアクセスできます。

プログラムで作成されたアプリでの UserData の共有

ドット表記 component.propertyname を使用して、プログラムによってプロパティ値を取得または設定します。ドット表記は、R2014b 以降のリリースで動作します。以下のコードは Figure の名前を取得して設定します。

hfig = figure;
figname = hfig.Name;
hfig.Name = 'My Window';
それより前のリリースを使用している場合は、代わりに関数 get および set を使用してください。
hfig = figure;
figname = get(hfig,'Name');
set(hfig,'Name','My Window');

コードからコンポーネントへ直接アクセスしていない場合は、関数 findobj を使用して、そのコンポーネントを検索できます。正常に検索された場合、findobj はコンポーネントを出力として返します。その後、コンポーネントのプロパティにアクセスできます。

次のアプリ コードは、UserData プロパティを使用してスライダーに関する情報を共有します。その動作を表示するには、このコードをコピーしてエディターに貼り付け、実行します。

function my_slider()
hfig = figure();
slider = uicontrol('Parent', hfig,'Style','slider',...
         'Units','normalized',...
         'Position',[0.3 0.5 0.4 0.1],...
         'Tag','slider1',...
         'UserData',struct('val',0,'diffMax',1),...
         'Callback',@slider_callback);
     
button = uicontrol('Parent', hfig,'Style','pushbutton',...
         'Units','normalized',...
         'Position',[0.4 0.3 0.2 0.1],...
         'String','Display Difference',...
         'Callback',@button_callback);
end

function slider_callback(hObject,eventdata)
	sval = hObject.Value;
	diffMax = hObject.Max - sval;
	data = struct('val',sval,'diffMax',diffMax);
	hObject.UserData = data;
	% For R2014a and earlier: 
	% sval = get(hObject,'Value');  
	% maxval = get(hObject,'Max');  
	% diffMax = maxval - sval;      
	% data = struct('val',sval,'diffMax',diffMax);   
	% set(hObject,'UserData',data);   

end

function button_callback(hObject,eventdata)
	h = findobj('Tag','slider1');
	data = h.UserData;
	% For R2014a and earlier: 
	% data = get(h,'UserData'); 
	display([data.val data.diffMax]);
end
スライダーが移動されると、slider_callback は、以下のコマンドを使用して構造体にデータを格納します。

  • data = struct('val',sval,'diffMax',diffMax) は、値 svaldiffMaxdata という構造体に格納します。

  • hObject.UserData = data は、data の値をスライダーの UserData プロパティに格納します。

プッシュ ボタンがクリックされると、button_callback は、以下のコマンドを使用してデータを取得します。

  • h = findobj('Tag','slider1') は、スライダー コンポーネントを検索します。

  • data = h.UserData は、スライダーの UserData プロパティの値を取得します。

GUIDE アプリでの UserData の共有

スライダーのデータを UserData プロパティと共有するように GUIDE アプリを設定するには、次の手順を実行します。

  1. コマンド ウィンドウで「guide」と入力します。

  2. [GUIDE のクイック スタート] ダイアログ ボックスで [空白の GUI (既定の設定)] を選択します。次に、[OK] をクリックします。

  3. 以下の手順に従って、コンポーネント パレットに UI コンポーネントの名前を表示します。

    1. [ファイル][設定][GUIDE] を選択します。

    2. [コンポーネント パレットに名前を表示] を選択します。

    3. [OK] をクリックします。

  4. レイアウト エディターの左のコンポーネント パレットから [プッシュ ボタン] ツールを選択し、レイアウト領域にドラッグします。

  5. レイアウト エディターの左のコンポーネント パレットから [スライダー] ツールを選択し、レイアウト領域にドラッグします。

  6. [ファイル][保存] を選択します。UI を myslider.fig として保存します。MATLAB で、コード ファイルがエディターで開きます。

  7. オープニング関数 myslider_OpeningFcnUserData プロパティの初期値を設定します。この関数は、UI がユーザーに対して表示可能になる直前に実行されます。

    myslider_OpeningFcn で、コマンド handles.output = hObject の直後に以下のコマンドを挿入します。

    data = struct('val',0,'diffMax',1);
    set(handles.slider1,'UserData',data);
    
    コマンドを追加した後、myslider_OpeningFcn は次のようになります。
    function myslider_OpeningFcn(hObject, eventdata, handles, varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to junk (see VARARGIN)
    
    % Choose default command line output for myslider
    handles.output = hObject;
    data = struct('val',0,'diffMax',1);
    set(handles.slider1,'UserData',data);
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes myslider wait for user response
    % uiwait(handles.figure1);
    
    handlesmyslider_OpeningFcn への入力引数である点に注意してください。変数 handles は、UI 内のすべてのコンポーネントを含む構造体です。この構造体の各フィールドは個々のコンポーネントに対応しています。各フィールド名は、対応するコンポーネントの Tag プロパティに一致します。したがって、handles.slider1 は、この UI 内のスライダー コンポーネントです。コマンド set(handles.slider1,'UserData',data) は、変数 data をスライダーの UserData プロパティに格納します。

  8. スライダー コールバックに、データを変更するためのコードを追加します。以下のコマンドを、関数 slider1_Callback の末尾に追加します。

    maxval = get(hObject,'Max');  
    sval = get(hObject,'Value');  
    diffMax = maxval - sval;   
    data = get(hObject,'UserData');
    data.val = sval;
    data.diffMax = diffMax;
    % Store data in UserData of slider
    set(hObject,'UserData',data);
    コマンドを追加した後、slider1_Callback は次のようになります。
    % --- Executes on slider movement.
    function slider1_Callback(hObject, eventdata, handles)
    % hObject    handle to slider1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'Value') returns position of slider
    %        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
    maxval = get(hObject,'Max');  
    sval = get(hObject,'Value');  
    diffMax = maxval - sval;   
    data = get(hObject,'UserData');
    data.val = sval;
    data.diffMax = diffMax;
    % Store data in UserData of slider
    set(hObject,'UserData',data);
    
    hObject が関数 slider1_Callback の入力引数である点に注意してください。hObject は、常にコールバックをトリガーするコンポーネント (この例ではスライダー) です。したがって、set(hObject,'UserData',data) は、変数 data をスライダーの UserData プロパティに格納します。

  9. プッシュ ボタン コールバックに、データを取得するためのコードを追加します。以下のコマンドを、関数 pushbutton1_Callback の末尾に追加します。

    % Get UserData from the slider
    data = get(handles.slider1,'UserData');
    currentval = data.val;
    diffval = data.diffMax;
    display([currentval diffval]);
    コマンドを追加した後、pushbutton1_Callback は次のようになります。

    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Get UserData from the slider
    data = get(handles.slider1,'UserData');
    currentval = data.val;
    diffval = data.diffMax;
    display([currentval diffval]);

    このコードは、handles 構造体を使用してスライダーにアクセスします。コマンド data = get(handles.slider1,'UserData') は、スライダーの UserData プロパティを取得します。その後、関数 display が格納された値を表示します。

  10. エディターのツールストリップで [保存] を押して、コードを保存します。

アプリケーション データとしてのデータの格納

アプリケーション データを格納するには、関数 setappdata を次のように呼び出します。

setappdata(obj,name,value);
最初の入力 obj は、データを格納するコンポーネント オブジェクトです。2 番目の入力 name は、値を記述するフレンドリ名です。3 番目の入力 value は、格納する値です。

アプリケーション データを取得するには、関数 getappdata を次のように使用します。

data = getappdata(obj,name);
コンポーネント obj は、データを含むコンポーネント オブジェクトでなければなりません。2 番目の入力 name は、データの格納時に使用した名前と一致しなければなりません。変数を 1 つだけもつ UserData プロパティとは異なり、setappdata を使用すると複数の変数を格納できます。

プログラムで作成されたアプリでのアプリケーション データの共有

このアプリは、アプリケーション データを使用して 2 つの値を共有します。その動作を表示するには、このコードをコピーしてエディターに貼り付け、実行します。

function my_slider()
hfig = figure();
setappdata(hfig,'slidervalue',0);
setappdata(hfig,'difference',1);

slider = uicontrol('Parent', hfig,'Style','slider',...
         'Units','normalized',...
         'Position',[0.3 0.5 0.4 0.1],...
         'Tag','slider1',...
         'Callback',@slider_callback);
     
button = uicontrol('Parent', hfig,'Style','pushbutton',...
         'Units','normalized',...
         'Position',[0.4 0.3 0.2 0.1],...
         'String','Display Values',...
         'Callback',@button_callback);
end

function slider_callback(hObject,eventdata)
	diffMax = hObject.Max - hObject.Value;
	setappdata(hObject.Parent,'slidervalue',hObject.Value);
	setappdata(hObject.Parent,'difference',diffMax);
	% For R2014a and earlier: 
	% maxval = get(hObject,'Max');  
	% currval = get(hObject,'Value');  
	% diffMax = maxval - currval;   
	% parentfig = get(hObject,'Parent');  
	% setappdata(parentfig,'slidervalue',currval); 
	% setappdata(parentfig,'difference',diffMax); 
end

function button_callback(hObject,eventdata)
	currentval = getappdata(hObject.Parent,'slidervalue');
	diffval = getappdata(hObject.Parent,'difference');
	% For R2014a and earlier:
	% parentfig = get(hObject,'Parent');
	% currentval = getappdata(parentfig,'slidervalue');
	% diffval = getappdata(parentfig,'difference');

	display([currentval diffval]);
end
スライダーが移動されると、関数 slider_callbackdiffMax を計算します。その後、以下のコマンドを使用して、アプリケーション データを変更します。

  • setappdata(hObject.Parent,'slidervalue',hObject.Value) は、現在のスライダーの値を、'slidervalue' という名前を使用して figure に格納します。この場合、hObject.Parent が figure です。

  • setappdata(parentfig,'difference',diffMax) は、diffMax を、'difference' という名前を使用して figure に格納します。

プッシュ ボタンがクリックされると、関数 button_callback は、以下のコマンドを使用してデータを取得します。

  • currentval = getappdata(hObject.Parent,'slidervalue') は、figure から現在のスライダーの値を取得します。この場合、hObject.Parent が figure です。

  • diffval = getappdata(hObject.Parent,'difference') は、figure から difference の値を取得します。

GUIDE アプリでのアプリケーション データの共有

アプリケーション データを共有するように GUIDE アプリを設定するには、次の手順を実行します。

  1. コマンド ウィンドウで「guide」と入力します。

  2. [GUIDE のクイック スタート] ダイアログ ボックスで [空白の GUI (既定の設定)] を選択します。次に、[OK] をクリックします。

  3. 以下の手順に従って、コンポーネント パレットに UI コンポーネントの名前を表示します。

    1. [ファイル][設定][GUIDE] を選択します。

    2. [コンポーネント パレットに名前を表示] を選択します。

    3. [OK] をクリックします。

  4. レイアウト エディターの左のコンポーネント パレットから [プッシュ ボタン] ツールを選択し、レイアウト領域にドラッグします。

  5. レイアウト エディターの左のコンポーネント パレットから [スライダー] ツールを選択し、レイアウト領域にドラッグします。

  6. [ファイル][保存] を選択します。UI を myslider.fig として保存します。MATLAB で、コード ファイルがエディターで開きます。

  7. オープニング関数 myslider_OpeningFcn にアプリケーション データの初期値を設定します。この関数は、UI がユーザーに対して表示可能になる直前に実行されます。myslider_OpeningFcn で、コマンド handles.output = hObject の直後に以下のコマンドを挿入します。

    setappdata(handles.figure1,'slidervalue',0); 
    setappdata(handles.figure1,'difference',1);
    コマンドを追加した後、myslider_OpeningFcn は次のようになります。
    function myslider_OpeningFcn(hObject,eventdata,handles,varargin)
    % This function has no output args, see OutputFcn.
    % hObject    handle to figure
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    % varargin   command line arguments to junk (see VARARGIN)
    
    % Choose default command line output for junk
    handles.output = hObject;
    setappdata(handles.figure1,'slidervalue',0); 
    setappdata(handles.figure1,'difference',1);
    
    % Update handles structure
    guidata(hObject, handles);
    
    % UIWAIT makes junk wait for user response (see UIRESUME)
    % uiwait(handles.figure1);
    
    handlesmyslider_OpeningFcn への入力引数である点に注意してください。変数 handles は、UI 内のすべてのコンポーネントを含む構造体です。この構造体の各フィールドは個々のコンポーネントに対応しています。各フィールド名は、対応するコンポーネントの Tag プロパティに一致します。この場合、handles.figure1 が figure オブジェクトです。したがって、setappdata は、この figure オブジェクトを使用してデータを格納できます。

  8. スライダー コールバックに、データを変更するためのコードを追加します。以下のコマンドを、関数 slider1_Callback の末尾に追加します。

    maxval = get(hObject,'Max');  
    currval = get(hObject,'Value');  
    diffMax = maxval - currval;   
    % Store application data
    setappdata(handles.figure1,'slidervalue',currval); 
    setappdata(handles.figure1,'difference',diffMax);
    コマンドを追加した後、slider1_Callback は次のようになります。
    function slider1_Callback(hObject, eventdata, handles)
    % hObject    handle to slider1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Hints: get(hObject,'Value') returns position of slider
    %        get(hObject,'Min') and get(hObject,'Max') to determine range of slider
    maxval = get(hObject,'Max');  
    currval = get(hObject,'Value');  
    diffMax = maxval - currval;   
    % Store application data
    setappdata(handles.figure1,'slidervalue',currval); 
    setappdata(handles.figure1,'difference',diffMax);
    このコールバック関数は handles 構造体にアクセスできるため、setappdata コマンドはデータを handles.figure1 に格納します。

  9. プッシュ ボタン コールバックに、データを取得するためのコードを追加します。以下のコマンドを、関数 pushbutton1_Callback の末尾に追加します。

    % Retrieve application data
    currentval = getappdata(handles.figure1,'slidervalue');
    diffval = getappdata(handles.figure1,'difference');
    display([currentval diffval]);
    コマンドを追加した後、pushbutton1_Callback は次のようになります。
    % --- Executes on button press in pushbutton1.
    function pushbutton1_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton1 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
    
    % Retrieve application data
    currentval = getappdata(handles.figure1,'slidervalue');
    diffval = getappdata(handles.figure1,'difference');
    display([currentval diffval]);
    このコールバック関数は handles 構造体にアクセスできるため、getappdata コマンドは handles.figure1 からデータを取得します。

  10. エディターのツールストリップで [保存] を押して、コードを保存します。

入れ子にされたコールバック関数の作成 (プログラム アプリ)

コールバック関数は、プログラム アプリのメイン関数内で入れ子にできます。こうすると、入れ子にされたコールバック関数はメイン関数とワークスペースを共有します。その結果、入れ子関数はメイン関数に定義されているすべての UI コンポーネントと変数にアクセスできるようになります。次のコード例では、入れ子関数を使用してスライダーの位置に関するデータを共有します。その動作を表示するには、このコードをコピーしてエディターに貼り付け、実行します。

function my_slider()
	hfig = figure();
	data = struct('val',0,'diffMax',1);
	slider = uicontrol('Parent', hfig,'Style','slider',...
         'Units','normalized',...
         'Position',[0.3 0.5 0.4 0.1],...
         'Tag','slider1',...
         'Callback',@slider_callback);
     
	button = uicontrol('Parent', hfig,'Style','pushbutton',...
         'Units','normalized',...
         'Position',[0.4 0.3 0.2 0.1],...
         'String','Display Difference',...
         'Callback',@button_callback);

	function slider_callback(hObject,eventdata)
		sval = hObject.Value;
		diffMax = hObject.Max - sval;
		% For R2014a and earlier:
		% sval = get(hObject,'Value');
		% maxval = get(hObject,'Max');
		% diffMax = maxval - sval;

		data.val = sval;
		data.diffMax = diffMax;
	end

	function button_callback(hObject,eventdata)
		display([data.val data.diffMax]);
	end
end
メイン関数は、data という名前の struct 配列を定義します。ユーザーがスライダーを動かすと、関数 slider_callbackdata 構造体の valdiffMax のフィールドを更新します。エンド ユーザーがプッシュ ボタンをクリックすると、関数 button_callback によって、data に格納されている値が表示されます。

メモ

GUIDE アプリには入れ子関数は推奨されません。

関数 guidata によるデータの格納

関数 guidata を使用すると、Figure ウィンドウとデータを共有できます。hObject コンポーネントを使用して、任意のコールバックでデータの格納や取得を実行できます。つまり、UserData やアプリケーション データの操作と異なり、データを設定または取得するために、1 つの特定のコンポーネントにアクセスする必要はありません。データを格納するには、次のように入力引数を 2 つ指定して guidata を呼び出します。

guidata(object_handle,data);
最初の入力 object_handle は、任意の UI コンポーネントです (通常は、hObject)。2 番目の入力 data は格納する変数です。2 つの入力引数を使用して guidata を呼び出すたびに、MATLAB は前に格納されたデータを上書きします。つまり、一度に格納できる変数は 1 つのみであることを意味します。複数の値を共有する場合は、データを struct 配列または cell 配列として格納します。

データを取得するには、入力引数と出力引数をそれぞれ 1 つ使用して guidata を呼び出します。

data = guidata(object_handle);
データの格納用に指定するコンポーネントと、データの取得用に使用するコンポーネントを同じにする必要はありません。

データが struct 配列または cell 配列として格納されている場合、他の要素を変更せずに 1 つの要素を更新するには、まずデータを取得してから、変更した配列で置き換えます。

data = guidata(hObject);
data.myvalue = 2;
guidata(hObject,data);

プログラムにより作成されたアプリでの guidata の使用

プログラム アプリで guidata を使用するには、メイン関数で初期値のデータを格納します。次に、任意のコールバック関数でこのデータを取得して変更します。

次のコードは、guidata を使用して、2 つのフィールドをもつ構造体を共有する簡単なプログラム アプリの例です。その動作を表示するには、このコードをコピーしてエディターに貼り付け、実行します。

function my_slider()
hfig = figure();
guidata(hfig,struct('val',0,'diffMax',1));
slider = uicontrol('Parent', hfig,'Style','slider',...
         'Units','normalized',...
         'Position',[0.3 0.5 0.4 0.1],...
         'Tag','slider1',...
         'Callback',@slider_callback);
     
button = uicontrol('Parent', hfig,'Style','pushbutton',...
         'Units','normalized',...
         'Position',[0.4 0.3 0.2 0.1],...
         'String','Display Values',...
         'Callback',@button_callback);
end

function slider_callback(hObject,eventdata)
	data = guidata(hObject);
	data.val = hObject.Value;
	data.diffMax = hObject.Max - data.val;
	% For R2014a and earlier:
	% data.val = get(hObject,'Value');
	% maxval = get(hObject,'Max');
	% data.diffMax = maxval - data.val;

	guidata(hObject,data);
end

function button_callback(hObject,eventdata)
	data = guidata(hObject);
	display([data.val data.diffMax]);
end
スライダーが移動されると、関数 slider_callback は以下のコマンドを実行し、格納されたデータを取得して変更します。

  • data = guidata(hObject) は、格納されたデータを構造体として取得します。

  • data.diffMax = maxval - data.val は、構造体内の diffMax フィールドを変更します。

  • guidata(hObject,data) は、変更された構造体を格納します。

プッシュ ボタンがクリックされると、関数 button_callback によって guidata が呼び出され、格納されている構造体のコピーが取得されます。次に、構造体に格納されている 2 つの値が表示されます。

GUIDE アプリでの guidata の使用

GUIDE では、関数 guidata を使用して、すべての UI コンポーネントを含む handles と呼ばれる構造体を格納します。配列 handles は MATLAB で各コールバック関数に渡されます。追加データを共有するために guidata を使用する場合は、オープニング関数の handles 構造体にフィールドを追加します。オープニング関数は、名前に _OpeningFcn を含むコード ファイルの先頭付近で定義される関数です。

コールバック関数のデータを変更するには、handles 構造体を変更してから、関数 guidata を使用してその構造体を格納します。次のスライダーのコールバック関数は、GUIDE コールバック関数内で handles 構造体を変更して格納する方法を示します。

function slider1_Callback(hObject, eventdata,handles)
% hObject   handle to slider1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles   structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range
	handles.myvalue = 2;
	guidata(hObject,handles);
end 

GUIDE の例: guidata を使用したスライダー データの共有

ここでは、関数 guidata を使用してスライダーとテキスト フィールド間でデータを共有する、プリビルドの GUIDE アプリを示します。スライダーを動かすと、テキスト フィールドに表示された数字が変化し、新しいスライダーの位置を示します。

GUIDE の例: 2 つのアプリ間でのデータの共有

ここでは、アプリケーション データと関数 guidata を使用して 2 つのダイアログ ボックス間でデータを共有する、プリビルドの GUIDE アプリを示します。2 番目のダイアログ ボックスにテキストを入力して [OK] をクリックすると、最初のダイアログ ボックスのボタン ラベルが変わります。

changeme_main.m では、関数 buttonChangeMe_Callback がこのコマンドを実行して 2 つ目のダイアログ ボックスを表示します。

changeme_dialog('changeme_main', handles.figure)

handles.figure 入力引数は、[changeme_main] ダイアログ ボックスの Figure オブジェクトです。

関数 changeme_dialogFigure オブジェクトから handles 構造体を取得します。したがって、[changeme_main] ダイアログ ボックスのすべてのコンポーネントを 2 つ目のダイアログ ボックスから使用できます。

GUIDE の例: 3 つのアプリ間でのデータの共有

ここでは、guidata および UserData を使用して 3 つのアプリ ウィンドウ間でデータを共有する、プリビルドの GUIDE アプリを示します。大きなウィンドウはアイコンのエディターで、ツール パレットおよびカラー パレットのウィンドウからの情報を受け取ります。

guide_inconeditor.m では、関数 guide_iconeditor_OpeningFcn に次のコマンドが含まれています。

colorPalette = guide_colorpalette('iconEditor', hObject)

引数は、次のようになります。

  • 'iconEditor' は、関数の実行でトリガーされる guide_iconEditor ウィンドウのコールバックを指定します。

  • hObject は、guide_iconEditor ウィンドウの Figure オブジェクトです。

  • colorPalette は、guide_colorPalette ウィンドウの Figure オブジェクトです。

同様にして、guide_iconeditor_OpeningFcn は、同じような入力引数と出力引数をもつ関数 guide_toolpalette を呼び出します。

これらの関数間で Figure オブジェクトを渡すことにより、guide_iconEditor ウィンドウで他の 2 つのウィンドウの handles 構造体にアクセスすることが可能になります。また、他の 2 つのウィンドウでも guide_iconEditor ウィンドウの handles 構造体にアクセスできます。

関連するトピック