How to change inputdlg's editbox into a popup menu?

3 vues (au cours des 30 derniers jours)
Luna
Luna le 2 Sep 2019
Commenté : Luna le 5 Sep 2019
Hellooo dear community!
I want to create a small dialog box which contains 2 different popup-menu. Do we have any built-in function like that? Or can I change inputdlg's editboxes into popup-menus?
Otherwise I have to create a parent figure which contains Ok, Cancel buttons and two uicontrol objects which are popups. I have to code callbacks for all these and it will be way longer than I expected. That's why I want a short quick solution. Do you have any ideas?
  1 commentaire
Rik
Rik le 2 Sep 2019
I would argue it isn't that much coding. If you don't use GUIDE it shouldn't take more than 10 minutes to throw something together.

Connectez-vous pour commenter.

Réponse acceptée

Rik
Rik le 2 Sep 2019
I'll be honest, it took me about 15 minutes, but this should to something similar to what you describe:
selection=doubleDropMenu({'a','b'},{'foo','bar'});
function choices=doubleDropMenu(list1,list2)
%Input a char array or a cellstr, the output is the selection, or 0 when
%the user presses cancel.
f=doubleDropMenu__create_GUI(list1,list2);%create GUI
uiwait(f);%wait for OK or cancel
%retrieve output and close
h=guidata(f);choices=h.choices;close(f);
end
function f=doubleDropMenu__create_GUI(list1,list2)
f=figure('menu','none','Toolbar','none');
h=struct('f',f);
h.button_ok=uicontrol('Parent',f,...
'Style','pushbutton',...
'Units','Normalized',...
'Position',[0.1 0.1 0.3 0.1],...
'String','OK',...
'Callback',@doubleDropMenu__Callback);
h.button_cancel=uicontrol('Parent',f,...
'Style','pushbutton',...
'Units','Normalized',...
'Position',[0.6 0.1 0.3 0.1],...
'String','cancel',...
'Callback',@doubleDropMenu__Callback);
h.list1=uicontrol('Parent',f,...
'Style','popupmenu',...
'Units','Normalized',...
'Position',[0.1 0.6 0.8 0.2],...
'String',list1);
h.list2=uicontrol('Parent',f,...
'Style','popupmenu',...
'Units','Normalized',...
'Position',[0.1 0.3 0.8 0.2],...
'String',list2);
guidata(h.f,h)
end
function doubleDropMenu__Callback(hObject,eventdata)
h=guidata(hObject);
switch hObject
case h.button_ok
h.choices=[get(h.list1,'Value') get(h.list2,'Value')];
case h.button_cancel
h.choices=[0 0];
end
guidata(h.f,h)
uiresume(h.f)
end
  1 commentaire
Luna
Luna le 5 Sep 2019
Thanks Rik, actually what I was looking for is a dynamically changing number of popumenus according to inputs I pass to the function. It definetely gave me an idea how to make it.
Thank you for your time and helping me on this :)

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Migrate GUIDE Apps dans Help Center et File Exchange

Produits


Version

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by