How to reorder the Listbox data ?

15 次查看(过去 30 天)
I have created GUI:
  • ListBox created, and Move up button in matlab as '.m' it is working
Code:
function moveUp(src,event,lbox)
index_move = ismember(1:length(lbox.Items),lbox.Value);
index_shift = circshift(index_move,-1);
position = 1:length(lbox.Items);
if isequal(lbox.Value,1)
position = circshift(position,-1);
else
value_up = position(index_move);
value_down = position(index_shift);
position(index_shift) = value_up;
position(index_move) = value_down;
end
set(lbox,'Items',lbox.Items(position));
set(lbox,'Value',find(index_shift));
end
  • But the same code is not working in Matlab app designer
Code:
index_move = ismember(1:length(app.ListBox.Items), size(app.ListBox.Value));
index_shift = circshift(index_move,-1);
position = 1:length(app.ListBox.Items);
if isequal(app.ListBox.Value,1)
position = circshift(position,-1);
else
value_up = position(index_move);
value_down = position(index_shift);
position(index_shift) = value_up;
position(index_move) = value_down;
end
set(app.ListBox.Items,app.ListBox.Items(position));
set(app.ListBox.Value,find(index_shift));
Kindly suggest a way for this?

采纳的回答

Kevin Holly
Kevin Holly 2022-7-7
The following code worked as a callback function for me.
index_move = ismember(app.ListBox.Items, app.ListBox.Value);
index_shift = circshift(index_move,-1);
position = 1:length(app.ListBox.Items);
if isequal(app.ListBox.Value,1)
position = circshift(position,-1);
else
value_up = position(index_move);
value_down = position(index_shift);
position(index_shift) = value_up;
position(index_move) = value_down;
end
set(app.ListBox,'Items',app.ListBox.Items(position));
set(app.ListBox,'Value',app.ListBox.Items(find(index_shift)));
  10 个评论
Lavanya
Lavanya 2022-7-13
编辑:Lavanya 2022-7-13
When we click the listbox, It has data i.e Image data & setup data in panel(read from '.dat ' file)
I have this function in main app and I wanted to execute 'move up' and 'move down ' operations in dialogapp. How to execute this function in 'dialogapp'? In this 'setup_' should update when move up and move down operations used
function updateRunOrder(app,orderconnection,newnames)
% update the order of all ListBoxes
temp_Items = app.ListBox.Items; % all List Boxes schould have the same items
for i=1:length(orderconnection)
% reorder:
app.ListBox.Items{i} = temp_Items{orderconnection(i)};
app.ListBoxGeometry.Items{i} = temp_Items{orderconnection(i)};
% rename:
app.ListBox.Items{i} = newnames{i};
app.ListBoxGeometry.Items{i} = newnames{i};
% change setup assignment:
setup_temp(i) = app.(strcat('setup_', string(i))); % save old setups
end
for i=1:length(orderconnection)
app.(strcat('setup_', string(i))) = setup_temp(orderconnection(i)); %assign saved, old setups to new order
end
% select the stup that is currently shown:
lastval = str2double(app.ListBox.Value{1}); % last shown setup
app.ListBox.Value{1} = num2str(orderconnection(lastval));
app.ListBoxGeometry.Value{1} = num2str(orderconnection(lastval));
end
Kevin Holly
Kevin Holly 2022-7-14
If you are using the function in both apps, I would suggest saving the function as a file that is called from each app. You can change the input to the function based on what app you call from (e.g. updateRunOrder(app,orderconnection,newnames) or updateRunOrder(app.Callingapp,orderconnection,newnames)).

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Develop Apps Using App Designer 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by