2015-11-29 4 views
0

Я создал listbox и включил несколько вариантов. Мои listbox содержат числа от 1 до 10. Когда я выбираю 3, 1 и 8, функция всегда ставит мои выборки в алфавитном порядке (1,3,8). Есть ли способ, чтобы я не мог сделать свой выбор в алфавитном порядке? Поэтому, если я выберу 3, 1 и 8, выход моего выбора будет 3, 1, 8.Listbox multiple selection matlab

Спасибо.

+0

, пожалуйста, напишите минимальный пример и снимок экрана о вашей проблеме. Никто не восстановит ваш gui, чтобы воспроизвести вашу проблему. – thewaywewalk

ответ

3

Для этого ответа предполагается, что вы используете .


Из документов для uicontrol:

  • 'listbox' ... В Value свойство хранит строки индексы выбранных элементов списка, и это значение вектора при выборе нескольких элементов. После любого события с кнопкой мыши, которое изменяет свойство Value, MATLAB оценивает процедуру обратного вызова окна списка. Чтобы отложить действие, когда можно выбрать несколько элементов, вы можете связать кнопку «Готово» со списком. Используйте обратную связь для этой кнопки, чтобы оценить поле списка Value.

Из вышесказанного мы узнаем, что информация о выбранных строк возвращается в Value. Оттуда, это вопрос отслеживания того, что выбрано. Это может быть довольно легко сделать, используя persistent переменную внутри ListBox»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 

Тогда это до вас, чтобы присвоить значение previouslyChosenItems Полезно.