メインコンテンツ

単一の App Designer アプリ内でのデータの共有

アプリを作成する場合、アプリのさまざまなコンポーネント間でデータを共有できます。プロパティはアプリ内のすべての関数およびコールバックからアクセスできるため、アプリ コンポーネント間でデータを共有するには、プロパティを使用する方法をお勧めします。たとえば、プロパティに値を保存し、別のアプリ コンポーネントを使用してその値を更新できます。

アプリ プロパティを定義すると、次の構文を使用してアプリ コード内の任意の場所からプロパティ値にアクセスできます。

app.Property

同様に、次の構文を使用して、アプリ UI コンポーネントの組み込みプロパティにアクセスできます。

app.Component.Property

代わりに複数のアプリ間でデータを共有する方法については、複数の App Designer アプリ間でのデータの共有を参照してください。

アプリ プロパティの定義

データをどの程度アクセス可能にするかに応じて、アプリ プロパティを private または public として定義できます。アプリ内でのみ共有するデータを保存する場合は、private プロパティを使用します。アプリの内部と外部で (データにアクセスする必要があるスクリプト、関数、その他のアプリなどと) 共有するデータを保存する場合は public プロパティを使用します。

[コード ビュー] は、プロパティを作成するためのいくつかの方法を提供しています。

  • [エディター] タブの [プロパティ] ボタンの下半分からドロップダウン リストを展開します。[プライベート プロパティ] または [パブリック プロパティ] を選択します。

    Property button on the App Designer toolstrip, showing the options to add a private property or a public property

  • [コード ブラウザー][プロパティ] タブをクリックし、Plus ボタンを使用してドロップダウン リストを展開し、[プライベート プロパティ] または [パブリック プロパティ] を選択します。

    Properties tab in the Code Browser. The tab contains a search box to find properties and a plus button to add a new property.

アプリ プロパティを作成するオプションを選択すると、App Designer によってプロパティの定義とコメントがアプリ コード内の properties ブロックに追加されます。

properties (Access = private)
    Property % Description
end

properties ブロックは編集可能であり、プロパティの名前を変更したり、プロパティを説明するコメントを編集したりできます。たとえば、次の private プロパティは平均コストの値を格納します。

properties (Access = private)
    X % Average cost
end

アプリの起動時にプロパティ値を設定する場合は、properties ブロックまたは startupFcn コールバックで既定値を指定できます。たとえば、アプリの起動時に次のプロパティの値は 5 になります。

properties (Access = private)
    X = 5 % Average cost
end

プロパティに保存可能な値の型を制限するには、プロパティ定義内でデータ型をプロパティに関連付けます。たとえば、次のコードでは、X プロパティに代入される値は、double と互換性のある型でなければなりません。X プロパティは、代入された値を double 型として保存します。

properties (Access = private)
    X double = 5 % Average cost
end

プロパティへのアクセス

アプリ プロパティを定義すると、構文 app.PropertyName を使用して、アプリ コード内の任意の場所からプロパティ値にアクセスしたり、プロパティ値を設定したりできます。たとえば、X プロパティの現在の値を取得し、その値を 10 に設定します。

y = app.X  % Get the value of X
app.X = 5; % Set the value of X

同じ構文を使用して、アプリの外部から public プロパティにアクセスすることもできます。

アプリ コンポーネントには組み込みプロパティもあります。たとえば、アプリに Button1 という名前のボタン コンポーネントが含まれている場合、app.Button1 を使用して Button オブジェクトにアクセスでき、app.Button1.Text を使用してボタンの組み込みの Text プロパティにアクセスできます。

例: プロット データおよびドロップダウン リストの選択肢の共有

1 つのコンポーネントを使用してアプリ プロパティの値を設定し、別のコンポーネントからそのプロパティにアクセスすることで、アプリ内でデータを共有できます。このサンプル アプリでは、ユーザーは編集フィールド コンポーネントを使用してプロットされたデータのサンプル サイズを設定し、ボタン コンポーネントをクリックして新しいサンプル サイズを使用してデータをプロットできます。

アプリの右側にプロットが表示されます。アプリの左側には、[Sample Size] 編集フィールド、[Colormap] ドロップダウン リスト、および [Update Plot] ボタンの 3 つのコンポーネントが表示されます。

すべてのコンポーネントからデータにアクセスできるようにするには、データをアプリ プロパティに保存します。この例では、アプリはプロット データを Z という名前の private プロパティに保存します。

classdef ConfigurePlotAppExample < matlab.apps.AppBase
    % ...
    properties (Access = private)
        Z = peaks(35); % Surface data to plot
    end
    % ...
end

アプリ内の任意のコンポーネントまたは関数からアプリ プロパティの値にアクセスできます。この例では、アプリ内の plotsurface 関数は、データをプロットする際に Z プロパティの値にアクセスします。

function plotsurface(app)
    % Plot Z
    surf(app.UIAxes,app.Z);
    % Set the colormap
    cmap = app.ColormapDropDown.Value;
    colormap(app.UIAxes,cmap);
end

アプリ ユーザーによるアプリの操作に応じて、アプリ プロパティの値を更新できます。この例では、アプリ ユーザーがサンプル サイズを変更すると、編集フィールドのコールバック関数によって Z の値が更新されます。

function SampleSizeEditFieldValueChanged(app,event)
    sampleSize = app.SampleSizeEditField.Value;
    % Update the Z property
    app.Z = peaks(sampleSize);
end

アプリ ユーザーが [Update Plot] ボタンを押すと、そのコールバック関数が plotsurface 関数を呼び出して、Z の新しい値を使用してプロットを更新します。

次に、[Update Plot] ボタンのコールバックから plotsurface 関数を呼び出すことで、Z の新しい値を使用してプロットを更新できます。

function UpdatePlotButtonPushed(app,event)
    plotsurface(app);
end

参考

トピック