0

我创建了一个listbox并启用了多项选择。我listbox包含从 1 到 10 的数字。当我选择 3、1 和 8 时,该函数始终按字母顺序(1、3、8)排列我的选择。有什么办法可以让它不按字母顺序排列我的选择吗?因此,如果我选择 3、1 和 8,我选择的输出是 3、1、8。

谢谢你。

4

1 回答 1

3

出于此答案的目的,我假设您正在使用


从文档中uicontrol

  • 'listbox'... 该Value属性存储当前选中的列表框项的行索引,当您选择多个项目时是一个向量值。在发生任何更改Value属性的鼠标按钮事件后,MATLAB 会计算列表框的回调例程。要在可以选择多个项目时延迟操作,您可以将“完成”按钮与列表框相关联。使用该按钮的回调来评估列表框Value属性。

从上面我们了解到,所选行的信息是在 中返回的Value。从那里开始,就是跟踪所选内容的问题。这可以很容易地使用persistent列表框中的变量来完成Callback,如下例所示:

function LISTBOX_EXAMPLE
hFig = figure('Units','Pixels','Position', [200 200 100 200],'Menubar','none');
uicontrol(hFig, ...
  'Style', 'listbox',...
  'Units','Pixels',...
  'Position', [20 20 80 150],...
  'Max',3,...
  'Min',0,...
  'String',num2cell(1:10),...
  'Callback',@selectionCallback);

  function selectionCallback(hObject,~)
    persistent previouslyChosenItems
    %// Elements were added:    
    if numel(previouslyChosenItems) < numel(hObject.Value)
      previouslyChosenItems = union(previouslyChosenItems,hObject.Value,'stable');
    %// Elements were removed:
    elseif numel(previouslyChosenItems) > numel(hObject.Value)
      previouslyChosenItems = intersect(previouslyChosenItems,hObject.Value,'stable');
    %// A different element was selected (single element):
    elseif numel(previouslyChosenItems) == numel(hObject.Value) && numel(hObject.Value)==1
      previouslyChosenItems = hObject.Value;
    end
    disp(['Currently selected items (in order): ' num2str(previouslyChosenItems(:)')]);
  end

end

示例输出:

Currently selected items (in order): 7
Currently selected items (in order): 3
Currently selected items (in order): 3  9
Currently selected items (in order): 3  9  1

然后由您来分配previouslyChosenItemssomplace 有用的值。

于 2015-11-29T16:21:59.907 回答