Main Content

GUIDE の対話型リスト ボックスのアプリ

メモ

GUIDE 環境は将来のリリースで削除される予定です。既存の GUIDE アプリは、GUIDE が削除された後も引き続き MATLAB® で動作しますが、GUIDE での編集はできません。

既存の GUIDE アプリを引き続き編集するには、将来の MATLAB リリースとの互換性維持に役立つ方法について、GUIDE の移行策を参照してください。新しいアプリを対話的に作成する場合は、代わりにApp Designer を使用したアプリ開発を参照してください。

この例では、プリビルドの GUIDE アプリを確認および実行する方法を説明します。このアプリには、特定のフォルダー内のファイルを表示するリスト ボックスが含まれます。リスト内の項目をダブルクリックすると、MATLAB で項目が開きます。

例を開いて実行

GUIDE でアプリを開き、[Figure を実行] (緑色の再生ボタン) をクリックして実行します。

あるいは、名前と値のペアの引数 'dir' を使用して、コマンド ウィンドウで関数 lbox2 を呼び出すことができます。名前と値のペアの引数により、任意のフォルダーの内容をリストできます。たとえば、次のコマンドでは Windows® システムの C:\ フォルダーにあるファイルがリストされます。

lbox2('dir','C:\')

メモ: コマンド ウィンドウで lbox2 を呼び出す前に、MATLAB® パス上のフォルダーに GUIDE ファイルを保存しなければなりません。ファイルを保存するには、GUIDE で [ファイル]、[名前を付けて保存] を選択します。

レイアウトとコールバック コードの確認

  1. GUIDE で、[エディター] ボタン をクリックしてコードを表示します。

  2. エディター ウィンドウの上部付近で、 [移動] ボタンを使用して、以下で説明する関数に移動します。

lbox2_OpeningFcn

コールバック関数 lbox2_OpeningFcn は、リスト ボックスがはじめて UI に表示される直前に実行されます。次のステートメントは、関数 lbox2 へのパス引数が指定されたかどうかを判定します。

if nargin == 3,
    initial_dir = pwd;
elseif nargin > 4
    if strcmpi(varargin{1},'dir')
        if exist(varargin{2},'dir')
            initial_dir = varargin{2};
        else
            errordlg('Input must be a valid directory','Input Argument Error!')
            return
        end
    else
        errordlg('Unrecognized input argument','Input Argument Error!');
        return;
    end
end
nargin==3 の場合、lbox2_OpeningFcn の入力引数は hObjecteventdata および handles のみです。したがって、lbox2 の呼び出し時にパスが指定されなかったため、リスト ボックスには現在のフォルダーの内容が表示されます。nargin>4 の場合、varargin 入力引数には 2 つの追加項目 (パスが指定されたことを示す) が含まれます。したがって、以降の if ステートメントではパスが有効かどうかを確認します。

listbox1_callback

リスト ボックス項目をクリックすると、コールバック関数 listbox1_callback が実行されます。関数の開始部分付近にあるこのステートメントは、リスト ボックスの項目をダブルクリックするたびに true を返します。

if strcmp(get(handles.figure1,'SelectionType'),'open')
条件が true の場合、listbox1_callback は、次のように選択されたリスト ボックス項目を特定します。
index_selected = get(handles.listbox1,'Value');
file_list = get(handles.listbox1,'String');
filename = file_list{index_selected};
このコールバック関数の残りのコードでは、選択した項目がフォルダー、FIG ファイルまたは別の種類のファイルのいずれであるかに応じて、その項目を開く方法を決定します。
    if  handles.is_dir(handles.sorted_index(index_selected))
        cd (filename)
        load_listbox(pwd,handles)
    else
        [path,name,ext] = fileparts(filename);
        switch ext
            case '.fig'
                guide (filename)
            otherwise
                try
                    open(filename)
                catch ex
                    errordlg(...
                      ex.getReport('basic'),'File Type Error','modal')
                end
        end
    end

関連するトピック