Create contents of popup menu dynamically

Asked by Luffy on 4 Jul 2012
Latest activity Commented on by Carl on 9 May 2013 at 2:06
 I want to create a popup menu with contents dynamically,based on value of a variable n in my code.
 Example:- If n is 2,the contents should be Data1,Data2.
           If n is 3,the contents should be Data1,Data2,Data3.  
           ...................................................
           If n is x,the contents should be Data1,Data2,......Datax

2 Comments

Jan Simon on 4 Jul 2012

Ok. What have you tried so far and what problems occurred? Did you read "doc uicontrol" already?

Luffy on 5 Jul 2012
 Yeah I know about uicontrol,I tried this:
 v = evalin('base','n');  % n is variable i explained in question.
 switch v
 Case 1
  uicontrol('Style', 'popupmenu', ...
            'String', {'Data1'}, ...
            'Units', 'pixels', ...
            'Position', [370, 60, 95, 21]);
 Case 2
   uicontrol('Style', 'popupmenu', ...
             'String', {'Data1','Data2'}, ...
             'Units', 'pixels', ...
             'Position', [370, 60, 95, 21]);
 Case 3
  uicontrol('Style', 'popupmenu', ...
            'String', {'Data1','Data2','Data3'}, ...
            'Units', 'pixels', ...
            'Position', [370, 60, 95, 21]);
 end
 But what if value of n is 100,I can't go on writing switch cases.
Luffy

Tags

Products

No products are associated with this question.

2 Answers

Answer by Mark Whirdy on 4 Jul 2012
Accepted answer

Hi Luffy

Not 100% sure I understand the degree of dynamism you're going for but stick the code below underneath whereever n changes (assuming handles is in scope there). Here you specify the menu contents cell array explicity in each case - does this fit your use-case?

switch n case 1 set(handles.popupmenu1,'String',{'Data1';'Data2'},'Value',1); case 2 set(handles.popupmenu1,'String',{'Data1';'Data2';'Data3'},'Value',1); end

Alternatively, if for some reason you're defining the contents to be a cellaray of 'Data#' whose length = n, then the code below should do it

n = 4; myarray = strcat('Data',cellfun(@num2str,num2cell((1:n)'),'UniformOutput',false)) set(handles.popupmenu1,'String',myarray,'Value',1);

All the best Mark

2 Comments

Luffy on 5 Jul 2012
 @Mark:thank you,but could you tell me that 'Value',1 in
 set(handles.popupmenu1,'String',myarray,'Value',1) mean
Jan Simon on 5 Jul 2012

Please read "doc uicontrol". The 'Value' is the initially selected item.

Mark Whirdy
Answer by Jan Simon on 5 Jul 2012
String  = sprintf('Data%d#', 1:n);
String(end) = [];
CString = regexp(String, '#', 'split');
uicontrol('Style', 'popupmenu', ...
          'String', String, ...
          'Units', 'pixels', ...
          'Position', [370, 60, 95, 21]);

1 Comment

Carl on 9 May 2013 at 2:06

Actually, the code can be simplified even further from Jan's answer. For a popup menu with multiple lines, you break the lines by the '|' character when feeding in a string to the 'uicontrol'. So just use this line of code:

String = sprintf('Data%d|',1:size(Data))

But Jan's answer is very elegant.

Jan Simon

Contact us