Main Content

GUIDE 中的交互式列表框 App

注意

在以后的版本中将会删除 GUIDE 环境。在删除 GUIDE 后,使用 GUIDE 创建的现有 App 可以继续在 MATLAB® 中运行,但不能在 GUIDE 中对其进行编辑。

要继续编辑使用 GUIDE 创建的现有 App,请参阅 GUIDE 迁移策略,了解有关如何帮助保持该 App 与未来 MATLAB 版本的兼容性的信息。要以交互方式创建新 App,请改用使用 App 设计工具开发 App

此示例说明如何查看和运行一个预置的使用 GUIDE 创建的 App。App 包含的列表框中显示了特定文件夹中的文件。双击列表中的项时,MATLAB 将会打开该列表项。

打开并运行示例

在 GUIDE 中打开 App,然后点击运行图窗(绿色的播放按钮)以运行它。

也可以在命令行窗口中使用 'dir' 名称-值对组参量调用 lbox2 函数。利用名称-值对组参量,可以列出任何文件夹的内容。例如,以下命令将会列出 Windows® 系统 C:\ 文件夹中的文件:

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

注意:必须在 MATLAB® 路径上的某个文件夹中保存 GUIDE 文件,然后才能在命令行窗口中调用 lbox2。要保存这些文件,请在 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 仅有的输入参量为 hObjecteventdatahandles。因此,用户在调用 lbox2 时没有指定路径,列表框显示的是当前文件夹的内容。如果 nargin>4,则 varargin 输入参量包含两个附加项(表明用户指定了路径)。因此,后续的 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

相关主题