Effacer les filtres
Effacer les filtres

Modify choices for a ListBox Callback

3 vues (au cours des 30 derniers jours)
Julián Francisco
Julián Francisco le 1 Nov 2011
I would like know how I could simplify(modify) the hSelecVarIndCallback function. I want to avoid the repetition of the choices string for each case and be able to get an automatic choice of the string individual value.
function example
fh = figure;
hPan = uipanel(fh,'title','Main Panel','Units','characters',...
'Position',[2.307 0 52 30],'FontSize',10,'FontWeight',...
'bold','FontAngle','italic');
hInd = uipanel('Parent',hPan,'title','Variable(s)','Units',...
'normalized','Position',[0 0.587 1 0.344],'FontSize',9,...
'FontAngle','italic');
hSelecVarInd = uicontrol(hInd,'Style','popupmenu','Units','normalized',...
'String',{'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'},...
'Value',1,'Position',[0.25 0.275 0.5 0.5],'FontSize',9,'Callback',...
@hSelecVarIndCallback,'BackgroundColor','white');
hDep = uipanel(hPan,'title','Variable(s) Dependiente(s)','Units',...
'normalized','Position',[0 0 1 0.5],'FontSize',9,'FontAngle','italic');
hDeplb = uicontrol(hDep,'Style','listbox','Units','normalized',...
'String',{'Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'},...
'Max',2,'Min',0,'Value',1,...
'Position',[0 0 1 1],'FontSize',9);
function hSelecVarIndCallback(src,evt)
val = get(hSelecVarInd,'Value');
if (val == 1)
set(hDeplb,'String',{'Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'});
elseif (val == 2)
set(hDeplb,'String',{'Time','Var 2','Var 3','Var 4','Var 5','Var 6'});
elseif (val == 3)
set(hDeplb,'String',{'Time','Var 1','Var 3','Var 4','Var 5','Var 6'});
elseif (val == 4)
set(hDeplb,'String',{'Time','Var 1','Var 2','Var 4','Var 5','Var 6'});
elseif (val == 5)
set(hDeplb,'String',{'Time','Var 1','Var 2','Var 3','Var 5','Var 6'});
elseif (val == 6)
set(hDeplb,'String',{'Time','Var 1','Var 2','Var 3','Var 4','Var 6'});
else
set(hDeplb,'String',{'Time','Var 1','Var 2','Var 3','Var 4','Var 5'});
end
end
end

Réponse acceptée

Walter Roberson
Walter Roberson le 1 Nov 2011
S = {'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'};
set(hDeplb, 'String', S(setdiff(1:length(S),val)) );
  1 commentaire
Julián Francisco
Julián Francisco le 1 Nov 2011
@Walter Roberson: Thank you so much for your answer. It is exactly what I need.

Connectez-vous pour commenter.

Plus de réponses (1)

Alex
Alex le 1 Nov 2011
I don't fully understand what you mean by your question, but I'll take a guess at a solution.
function hSelecVarIndCallback(src,evt)
val = get(hSelecVarInd,'Value');
popup_contents = {'Time','Var 1','Var 2','Var 3','Var 4','Var 5','Var 6'};
popup_contents(val) = [];
set(hDeplb,'String',popup_contents);
end
  3 commentaires
Alex
Alex le 1 Nov 2011
I made a mistake in my answer. I used {} instead of ().
using:
popup_contents(val) = [];
instead will remove that element from the array completely, and not leave you with the empty element.
Julián Francisco
Julián Francisco le 1 Nov 2011
@Alex: I suggest you to edit your answer to show the proper code.

Connectez-vous pour commenter.

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by