Create contents of popup menu dynamically

2 ビュー (過去 30 日間)
Luffy
Luffy 2012 年 7 月 4 日
コメント済み: Samuel Hirsbrunner 2016 年 7 月 23 日
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 件のコメント
Jan
Jan 2012 年 7 月 4 日
Ok. What have you tried so far and what problems occurred? Did you read "doc uicontrol" already?
Luffy
Luffy 2012 年 7 月 5 日
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.

サインインしてコメントする。

採用された回答

Mark Whirdy
Mark Whirdy 2012 年 7 月 4 日
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 件のコメント
Luffy
Luffy 2012 年 7 月 5 日
@Mark:thank you,but could you tell me that 'Value',1 in
set(handles.popupmenu1,'String',myarray,'Value',1) mean
Jan
Jan 2012 年 7 月 5 日
Please read "doc uicontrol". The 'Value' is the initially selected item.

サインインしてコメントする。

その他の回答 (1 件)

Jan
Jan 2012 年 7 月 5 日
String = sprintf('Data%d#', 1:n);
String(end) = [];
CString = regexp(String, '#', 'split');
uicontrol('Style', 'popupmenu', ...
'String', String, ...
'Units', 'pixels', ...
'Position', [370, 60, 95, 21]);
  3 件のコメント
Mus'ab Ahmad
Mus'ab Ahmad 2015 年 8 月 18 日
Thanks Jan
Samuel Hirsbrunner
Samuel Hirsbrunner 2016 年 7 月 23 日
finde this on my researches... I may shorten the code again:
String = sprintf('Data%d\n',1:size(Data))
by adding "\n" it made a new line on each value. so no need for the regesp() at least i think this works...

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMigrate GUIDE Apps についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by