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

App Designer での複数ウィンドウをもつアプリの作成

複数ウィンドウのアプリは、データを共有する 2 つ以上のアプリで構成されます。アプリ間でデータを共有する方法は、設計によって異なります。一般的な設計の 1 つは、2 つのアプリ (メインのアプリと 1 つのダイアログ ボックス) を使用するものです。通常、メインのアプリにはダイアログ ボックスを開くボタンがあります。ユーザーがダイアログ ボックスを閉じると、ダイアログ ボックスによってユーザーの選択内容がメイン ウィンドウに送信され、計算の実行および UI の更新が行われます。

これらのアプリは、異なるタイミングに異なる方法で情報を共有します。

  • ダイアログ ボックスが開かれると、メインのアプリは入力引数を使用してダイアログ ボックスのアプリを呼び出すことによって、ダイアログ ボックスに情報を渡します。

  • ダイアログ ボックスでユーザーが [OK] ボタンをクリックすると、入力引数を使用してメインのアプリのパブリック関数を呼び出すことによって、ダイアログ ボックスからメインのアプリに情報が返されます。

プロセスの概要

前のセクションで説明したアプリを作成するには、2 つの別個のアプリ (メイン アプリとダイアログ ボックス アプリ) を作成しなければなりません。次に、以下の高いレベルのタスクを実行します。各タスクには複数の手順が含まれます。

  • ダイアログ ボックスへの情報の送信 — 入力引数を受け入れるダイアログ ボックス アプリに StartupFcn コールバックを記述します。入力引数の 1 つがメイン アプリ オブジェクトでなければなりません。次に、メイン アプリで、入力引数を使用してダイアログ ボックス アプリを呼び出します。

  • メイン アプリへの情報の返送 — ダイアログ ボックスのユーザーの選択に基づいて UI を更新するメイン アプリにパブリック関数を記述します。パブリック関数であるため、ダイアログ ボックスで呼び出して値を渡すことができます。

  • ウィンドウを閉じるときの管理 — Windows が終了したときに保守タスクを実行する両方のアプリに CloseRequest コールバックを記述します。

このプロセスのすべてのステップの実装を確認するには、ダイアログ ボックスを開くプロット アプリを参照してください。

ダイアログ ボックスへの情報の送信

メイン アプリからダイアログ ボックス アプリに値を渡すには、次の手順を実行します。

  1. ダイアログ ボックス アプリで、StartupFcn コールバックの入力引数を定義し、コールバックにコードを追加します。[コード ビュー] でダイアログ ボックスのアプリを開きます。[エディター] タブで [アプリの入力引数] をクリックします。[アプリの入力引数] ダイアログ ボックスで、入力引数の変数名のコンマ区切りのリストを入力します。メインの app オブジェクトを格納する変数として、入力の 1 つを指定します。[OK] をクリックします。

    mainapp の値を保存するコードを StartupFcn のコールバックに追加します。

    function StartupFcn(app,mainapp,sz,c)
        % Store main app object
        app.CallingApp = mainapp;
    
        % Process sz and c inputs
        ...
    end

    StartupFcn コールバックのすべてのコードを示した例については、ダイアログ ボックスを開くプロット アプリを参照してください。

  2. メイン アプリのコールバック内からダイアログ ボックス アプリを呼び出します。メイン アプリを [コード ビュー] で開き、[Options] ボタンにコールバック関数を追加します。このコールバックは、ユーザーが複数のダイアログ ボックスを開かないように [Options] ボタンを無効にします。次に、ダイアログ ボックスに渡す値を取得し、入力引数と出力引数を持つダイアログ ボックス アプリを呼び出します。出力引数は、ダイアログ ボックスの app オブジェクトです。

    function OptionsButtonPushed(app,event) 
        % Disable Plot Options button while dialog is open
        app.OptionsButton.Enable = 'off';
    
        % Get szvalue and cvalue
        % ....
        
        % Call dialog box with input values
        app.DialogApp = DialogAppExample(app,szvalue,cvalue);
    end

  3. メイン アプリで、ダイアログ ボックス アプリを保存するプロパティを定義します。メイン アプリを開いたまま、DialogApp というプライベート プロパティを作成します。[エディター] タブで [プロパティ][プライベート プロパティ] を選択します。次に、properties ブロックで、プロパティ名を DialogApp に変更します。

    properties (Access = private)
           DialogApp % Dialog box app
    end

メイン アプリへの情報の返送

次の手順を実行して、ユーザーの選択内容をメイン アプリに返します。

  1. メイン アプリで UI を更新するパブリック関数を作成します。[コード ビュー] でメイン アプリを開いて、[エディター] タブで [関数][パブリック関数] を選択します。

    既定の関数名を目的の名前に変更し、ダイアログ ボックスからメイン アプリに渡す各オプションの入力引数を追加します。app 引数は最初でなければならないため、追加の引数はこの引数に続けて指定します。次に、入力を処理する関数にコードを追加して、メイン アプリを更新します。

    function updateplot(app,sz,c) 
        % Process sz and c 
        ...
    end

    パブリック関数の完全にコード化された例については、ダイアログ ボックスを開くプロット アプリを参照してください。

  2. メイン アプリで、ダイアログ ボックス アプリを保存するプロパティを作成します。[コード ビュー] でダイアログ ボックス アプリを開き、CallingApp というプライベート プロパティを作成します。[エディター] タブで [プロパティ][プライベート プロパティ] を選択します。次に、properties ブロックのプロパティ名を CallingApp に変更します。

    properties (Access = private)
            CallingApp % Main app object
    end

  3. ダイアログ ボックス アプリのコールバック内からパブリック関数を呼び出します。ダイアログ ボックス アプリを開いたままにして、[OK] ボタンのコールバック関数を追加します。

    このコールバックで、CallingApp プロパティとユーザーの選択をパブリック関数に渡します。次に、ダイアログ ボックスを閉じるために、関数 delete を呼び出します。

    function ButtonPushed(app,event)
       % Call main app's public function
       updateplot(app.CallingApp,app.EditField.Value,app.DropDown.Value);
    
       % Delete the dialog box  
       delete(app)                  
    end

ウィンドウを閉じるときの管理

どちらのアプリでも、ユーザーが閉じるときに特定のタスクを実行しなければなりません。ダイアログ ボックスを閉じる前に、メイン アプリの [Options] ボタンを再度有効にしなければなりません。メイン アプリが閉じる前に、ダイアログ ボックス アプリも閉じていることを確認しなければなりません。

  1. ダイアログ ボックス アプリを [コード ビュー] で開き、[コンポーネント ブラウザー]app.UIFigure オブジェクトを右クリックし、[コールバック][CloseRequestFcn コールバックの追加] を選択します。次に、メイン アプリのボタンを再度有効にしてダイアログ ボックス アプリを閉じるコードを追加します。

    function DialogAppCloseRequest(app,event)
       % Enable the Plot Options button in main app
       app.CallingApp.OptionsButton.Enable = 'on';
                
       % Delete the dialog box 
       delete(app)             
    end

  2. メイン アプリを [コード ビュー] で開き、[コンポーネント ブラウザー]app.UIFigure オブジェクトを右クリックし、[コールバック][CloseRequestFcn コールバックの追加] を選択します。次に、両方のアプリを削除するコードを追加します。

    function MainAppCloseRequest(app,event)
       % Delete both apps
       delete(app.DialogApp)
       delete(app)              
    end

例: ダイアログ ボックスを開くプロット アプリ

このアプリは、ダイアログ ボックスでオプションを選択するためのボタンをもつメインのプロット アプリで構成されています。[Options] ボタンを押すと、入力引数を使用してダイアログ ボックスのアプリが呼び出されます。ダイアログ ボックスで、メインのアプリのパブリック関数を呼び出すことによって、[OK] ボタンのコールバックがユーザーの選択内容をメイン アプリに送信します。

関連するトピック