Help with menu command
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I am working on a project where a user selects an option from a menu. The catch is that the when the user selects it the next user should see 'XXXX' in place of what the last user selects. If the next user selects the 'XXXX' it should display an error. Any help would be appriciated.
My menu:
car_c = menu('Which car would you like', ...
'C1','C2','C3','C4','C5','C6','C7','C8','C9','C10', ...
'C11','C12','C13','C14','C15','C16','C17','C18','C19','C20', ...
'C21','C22','C23','C24','C25','C26','C27','C28','C29','C30', ...
'C31','C32','C33','C34','C35','C35','C36','C37','C39','C40');
0 commentaires
Réponse acceptée
dpb
le 18 Nov 2018
Modifié(e) : dpb
le 18 Nov 2018
Don't use fixed list, use an array of possible choices and keep a corollary variable of those already taken so those aren't ever shown as available to the next user.
A menu of such long list isn't really a particularly friendly UI, but that would be the way to code it as a first learning coding experience.
ADDENDUM
A small example of the idea; will need to factor out the "what to do" stuff rather than try to keep all inline as is below, but illustrates the idea of keeping track of which vehicles are in inventory.
Obviously need a "check in" function that does the reverse that would, of course, use pool(~ix) to present those from which to select.
NB: the addition of an 'Exit' button first for convenience and being a little neater than just closing the window; there's some bookkeeping associated with that to keep straight which car is actually the one associated with the menu.
N=4;
pool=[1:N].'; % available car pool
go=true; % flag to run selection
n=0; % initialize number out
ix=true(1,N); % those available
while go
cars=cellstr(['Exit';num2str(pool(ix),'Car%0d')]);
c=menu('Select a car',cars); % ask for selection correct w/ Exit==1
if c<=1
go=false; % bail on exit or quit
else
ix(pool(c-1))=false; % make this one unavailable
n=n+1; % count number in use
fprintf('Chose car: %s. In use: %d\n', cars{c}, n)
if n==N
disp('Inventory Depleted. Bye')
go=false;
end
end
end
Also NB: menu is deprecated; it is suggested to use dialog instead and as noted before, something more user-friendly than 40 pushbuttons in a long column would be the obvious choice instead if coding "in anger" and not just as learning exercise.
4 commentaires
Image Analyst
le 18 Nov 2018
Too bad they don't have a checkboxdlg() for checkboxes like they do for menu() for buttons and listdlg() for listboxes.
Plus de réponses (0)
Voir également
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!