MATLAB应用程序设计器列表框保存值

gwbalxhn  于 2022-11-24  发布在  Matlab
关注(0)|答案(1)|浏览(174)

我正在尝试在应用程序设计器中保存用户输入(MATLAB)。我创建了一个空结构体,但我无法确定列表框中的项目保存在哪里。使用Matlab,通常会创建一个矩阵,人们可以使某些UI组件持久化,但这似乎不是应用程序设计器的情况。我附上了代码的副本,这不是完整的代码,而是列表框的区域

properties (Access = public)
    myStruct = struct()
end

% Callbacks that handle component events
methods (Access = private)

    % Callback function: NEXTButton_4, WelcomeTab
    function ButtonPushed(app, event)
     
        app.TabGroup.SelectedTab = app.AgeTab
       
    end

    % Value changed function: ListBox
    function ListBoxValueChanged(app, event)
        value = app.ListBox.Value;
        if strcmp(app.ListBox.Value ,'18-28')||strcmp(app.ListBox.Value ,'29-39')||strcmp(app.ListBox.Value,'40-50')||strcmp(app.ListBox.Value,'51-61')...
                ||strcmp(app.ListBox.Value,'62-72');
          set(app.NEXTButton,'Enable','on');
           Age = app.myStruct.Age;

        end
                   Age = app.ListBox.Value;
%             save('Age.mat',"Age")
          %  save('Dummyfile.mat', '-struct', myStruct)
          
%             for i = 1:numel(app.ListBox.Items)
%     index(i) = isequal(app.ListBox.Value{1}, [app.ListBox.ItemsData{i}]);
%             end
%             idx = find(index); % Find indice of nonzero element
% ItemName = app.ListBox.Items{idx}

我试着创建一个索引,但没有成功。

vbopmzt1

vbopmzt11#

我不确定我是否正确理解了这个问题,但是,如果要保存所有选定项目的值,可以:
将两个properties添加到应用程序:

  • cellarray,其中存储所选项目的值;如果只需要保存它,就不需要结构体
  • 用作Cellarray索引的计数器
properties (Access = public)
   Selected_items = {} % Description
   n_ages;
end

startupFcn中:

  • 将Cellarray初始化为空
  • 将列表框值设置为空数组,以指定在开始时不选择(否则,创建应用程序时,第一个项目将默认显示为选中,并且回调ListBoxValueChanged将不会捕获对它的选择)
  • 将计数器初始化为0
function startupFcn(app)
   app.Selected_items = {};
   app.ListBox.Value = {};
   app.n_ages = 0;
end

ListBoxValueChanged callback中:

  • 获取所选项的值
  • 递增计数器
  • 将该值存储在您添加的应用cellarray中;通过这种方式,所选项目的列表将可用于应用程序的其他回调和函数,而无需将其存储在“.mat文件”中
  • 复制Cellarray的内容
  • 将Cellarray保存在.“mat”文件中
function ListBoxValueChanged(app, event)
      value = app.ListBox.Value;
      app.n_ages = app.n_ages + 1;
      app.Selected_items{app.n_ages} = value;
      Selected_Items=app.Selected_items;
      save('SEL_ITEMS.mat','Selected_Items');
   end

注意:您可以很容易地修改上述ListBoxValueChanged回调的代码,以考虑if条件

相关问题