我有一个弹出式菜单,其中包含5,10,15,20个菜单中的内容。使用开关我创建了这个
val=get(hobject,'value');
switch val
case '5'
n=5;
case '10'
n=10;
case '15'
n=15;
case '20'
n=20;
end
guidata(hObject, handles);
表示输出图像的数量。在同一GUI窗口中按下搜索按钮时,它调用另一个函数,我需要使用此'n'。
for i = 1:n % Store top n matches...
tempstr = char(resultNames(index(i)));
fprintf(fid, '%s\r', tempstr);
disp(resultNames(index(i)));
disp(sortedValues(i));
disp(' ')
end
如何将此'n'传递给该代码或函数? 任何正确的答案都是值得的。
答案 0 :(得分:2)
好吧,从你的switch
语句开始是不正确和不必要的。下拉列表的Value
属性不是当前选择中包含的文本,而是列表中当前选择的索引。要获取当前所选列表项的字符串值,您可以执行以下操作:
contents = cellstr(get(hObject,'String')) % returns contents as cell array
contents{get(hObject,'Value')} % returns value of selected item from dropdown
当然,假设hObject
是一个指向您的下拉框的句柄 - 如果您处于下拉列表引发的回调中,它将仅 本身。除此之外,请注意不需要通过离散的switch
语句转换字符串值;您可以使用str2num
或str2double
函数。
最后,如果您需要从其自己的一个回调中访问下拉列表的值,则需要使用传递到每个回调的handles
结构(或者,在您的示例中,返回该结构)来自guidata
)。句柄中将有一个与您的下拉列表同名的字段 - 这将是您可以通过其访问其属性的句柄。
答案 1 :(得分:1)
围绕GUI传递信息的方法是使用handles
结构。如果您使用GUIDE [{1}}创建了GUI,则应在open函数中创建。您可以修改开始函数以将字段和初始值添加到handles
。例如,您可以将以下内容添加到打开功能:
handles
然后在回调中包含以下内容,以便菜单更新并存储n:
的值handles.n = 1; % This initializes handles.n to a default value in case the search button is
% pushed before an item in the menu is selected.
在搜索按钮的回调中,您可以访问n的值并将其传递给您的其他功能,如下所示:
handles.n = val; % This is updated every time an item from the menu is selected.
guidata(hObject,handles);
您的其他功能将从以下内容开始:
n = handles.n;
myFunction(n);
然后是上面包含的其余代码。您必须确保myFunction.m位于Matlab搜索路径中(可以使用function [] = myFunction(n)
或单击Matlab中的设置路径按钮进行设置。)