3

我有一个弹出菜单,其中包含 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'传递给那个代码或函数?任何适当的答案都是可观的。

4

2 回答 2

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语句转换字符串值;你可以只使用str2numorstr2double函数。

最后,如果您需要从其自己的回调之一之外访问下拉列表的值,则需要使用handles传递给每个回调的结构(或者在您的示例中,从 中返回guidata)。句柄中将有一个与您的下拉列表同名的字段 - 这将是您可以访问其属性的句柄。

于 2013-03-26T18:25:52.363 回答
1

在 GUI 周围传递信息的方法是使用该handles结构。如果您使用 GUIDE 创建 GUI,handles则应该在打开函数中创建。您可以修改打开函数以将字段和初始值添加到handles. 例如,您可以将以下内容添加到打开函数中:

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 的值并将其传递给您的其他函数,如下所示:

n = handles.n;
myFunction(n);

您的其他功能将从以下内容开始:

function [] = myFunction(n)

然后是您上面包含的其余代码。您必须确保 myFunction.m 在 Matlab 搜索路径中(可以使用addpath或单击 Matlab 中的设置路径按钮进行设置。)

于 2013-03-26T18:28:13.037 回答