У меня есть GUI, который использует выбор от popupmenu в другом обратном вызове. Существует ли способ возвратить выбранное значение popupmenu только в одной строке, не создавая временных переменных? Я попробовал несколько решений, но я только управлял двумя строками с одной временной переменной:
Три строки:
list=get(handles.popupmenu1,'String');
val=get(handles.popupmenu1,'Value');
str=list{val};
Две строки:
temp=get(handles.popupmenu1,{'String','Value'});
str=temp{1}{temp{2}};
Кто-либо может побрить его вниз одному?
PS, Это - динамическое меню, таким образом, я не могу просто использовать get(handles.popupmenu1,'Value')
и проигнорируйте строковый компонент в целом.
Вот однострочный текст:
str = getCurrentPopupString(handles.popupmenu1);
А вот определение getCurrentPopupString
function str = getCurrentPopupString(hh)
%# getCurrentPopupString returns the currently selected string in the popupmenu with handle hh
%# could test input here
if ~ishandle(hh) || strcmp(get(hh,'Type'),'popupmenu')
error('getCurrentPopupString needs a handle to a popupmenu as input')
end
%# get the string - do it the readable way
list = get(hh,'String');
val = get(hh,'Value');
if iscell(list)
str = list{val};
else
str = list(val,:);
end
Я знаю, что это не тот ответ, который вы искали, но он отвечает на вопрос вы спросили :)
Я знаю, что это глупо, но я не смог удержаться:
list=get(handles.popupmenu1,'String'); str=list{get(handles.popupmenu1,'Value')};
Я знаю, что это не то, что вы имели в виду, но, как и другие ответы выше, это отвечает на ваш вопрос... :-)
Чтобы сделать его однострочным, я бы просто создал свою собственную функцию (например, getMenuSelection
), как Йонас иллюстрирует в своем ответе . Если вы действительно хотите по-настоящему однострочник, вот тот, который использует CELLFUN :
str = cellfun(@(a,b) a{b},{get(handles.popupmenu1,'String')},{get(handles.popupmenu1,'Value')});
Очень некрасивый и трудный для чтения. Я бы определенно написал свою функцию.
РЕДАКТИРОВАТЬ: А вот немного более короткий (но все же такой же уродливый) однострочник с использованием FEVAL :
str = feval(@(x) x{1}{x{2}},get(handles.popupmenu1,{'String','Value'}));