用按钮 Matlab 终止 while 循环

Terminating while loop with a pushbutton Matlab

我有一个 uitable 和一个函数,当用户点击其各自的行时,returns 项目的 id。 id 也是一个全局变量,因为它用于各种函数。 这个想法是我创建一个数组,其中包含所有用户从 uitable 中选择的项目,在单击保存播放列表时终止。前任。如果用户连续选择 id 为 5、7、9 的项目然后单击 'save playlist' 按钮,我希望数组保持

5 7 9

我认为最好的方法是使用 while 循环。 while 循环应检查是否已单击保存按钮。我有一个全局变量,一旦程序进入 'save playlist' 按钮回调函数就会发生变化。

问题是,一旦用户选择了一个 ID,数组就会继续迭代,直到用户选择另一个 ID,并且会继续迭代等等,直到单击保存按钮。例如:用户点击 ID 5,数组将记录 55555555555555... 重复出现,直到用户点击 ex。 ID 7:555555555555557777777777,因为程序一直在循环,没有暂停。

代码如下所示:

 while (keeprunning)
     idvec = [idvec id];
 end

keeprunning是一个全局变量,在开启函数中初始化为1。在'save playlist'回调函数中改为0。

我想通过引入一个名为 'itemselected' 的新全局变量来解决此问题,该变量在打开函数中初始化为 1,并在每次调用单元格选择回调时再次更改为 1。在 while 循环中将 ID 添加到数组后,此变量将重置为 0。

想法是当 'save playlist' 按钮未被点击时循环应该迭代(由 keeprunning 全局变量控制)但是程序不应该让 while 循环迭代直到用户点击另一行即直到再次调用小区选择回调函数。

我需要这样的东西,但这不起作用(无限循环)。或者其他一些建议??

 while (keeprunning || trackselected)
    idvec = [idvec id];
    trackselected = 0;
 end

提前致谢

要记录用户在 uitable 中选择字段的历史记录,请执行如下操作:

function tbl_example

  % Create the figure
  fh = figure('Visible', 'off')

  ud.selected_list  = []; 

  d = gallery('integerdata',100,[10 3],0);
  t = uitable(fh,'Data',d,'ColumnWidth',{50}, 'cellselectioncallback',    @cell_history );

  set( fh, 'visible', 'on' );
  set( fh, 'userdata', ud );
return

function cell_history( h, event_data )

  fh = get( h, 'Parent' )
  ud = get( fh, 'userdata' );

  indx = event_data.Indices;

  ud.selected_list = [ ud.selected_list h.Data( indx(1), indx(2) ) ] 

  set( fh, 'userdata', ud );
return

然后,当您点击 "playlist" 按钮时,只需读取父图形句柄中的用户数据字段。

在停止思考并做其他事情后,我解决了这个问题;令人着迷的是,它是一种非常简单的方法。

我所做的是在 CellSelectionCallback 中创建一个全局数组。该程序通过在 'create a playlist' 按钮回调中使用布尔变量来检查程序是否已启动以创建播放列表,在这种情况下,全局数组附加了所选行的项目 ID。由于数组是全局的,它可以用于不同的函数。单击 'save playlist' 按钮后刷新数组。

就这么简单,然而,有时简单并不是那么简单,尤其是在看了大约 10 个小时的 matlab 代码之后。