使用按钮Matlab终止while循环

时间:2015-04-10 02:33:15

标签: matlab loops while-loop callback infinite

我有一个uitable和一个函数,一旦用户点击其各自的行,就会返回该项的id。 id也是一个全局变量,因为它用于各种函数。 我的想法是创建一个数组,其中包含所有用户选择的项目,在点击保存播放列表时终止。防爆。如果用户连续选择id为5,7,9的项目,然后点击“保存播放列表”按钮,我希望数组保持

5 7 9

我认为最好的方法是使用while循环。 while循环应检查是否已单击“保存”按钮。我有一个全局变量,一旦程序进入“保存播放列表”按钮回调函数就会改变。

问题在于,一旦用户选择了ID,该数组将继续迭代,直到用户选择另一个ID,并继续迭代等等,直到单击保存按钮。例如:用户点击ID 5,阵列将记录55555555555555 ...重复出现,直到用户点击ex。 ID 7:555555555555557777777777,因为程序在不停顿的情况下继续循环和循环。

代码如下所示:

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

keeprunning是一个全局变量,在open函数中初始化为1。它在“保存播放列表”回调函数中更改为0。

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

这个想法是循环应该迭代而不点击'保存播放列表'按钮(由keeprunning全局变量控制)但是程序不应该让while循环迭代直到用户点击另一行,即直到单元格选择回叫功能再次被调用。

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

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

提前谢谢

2 个答案:

答案 0 :(得分:0)

要记录用户在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

然后,当您点击“播放列表”按钮时,只需阅读父图句柄中的userdata字段。

答案 1 :(得分:0)

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

我所做的是在CellSelectionCallback中创建一个全局数组。程序通过在“创建播放列表”中使用布尔变量来检查程序是否已启动以创建播放列表。按钮回调,在这种情况下,全局数组附加了所选行的项ID。由于阵列是全局的,因此可以在不同的功能上使用。在“保存播放列表”之后刷新数组'单击按钮。

虽然这很简单,但有时简单并不那么简单,特别是在看了matlab代码大约10个小时之后。