2013-03-26 141 views
2

我有一個彈出菜單,其中包含5,10,15,20該菜單中的內容。使用開關我創建了這個MATLAB中的GUI彈出菜單

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'傳遞給該代碼或函數? 任何正確的答案是可觀的。

回答

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是指向你的下拉框的手柄 - 這將是只有如果您這是由下拉本身引發的回調。此外,請注意有不需要通過discretised switch語句轉換字符串值;您可以使用str2numstr2double函數。

最後,如果您需要從自己的回調之外訪問下拉列表的值,則需要使用傳入每個回調的handles結構(或者,在您的示例中,從guidata返回) 。在句柄中將出現與您的下拉列表名稱相同的字段 - 這將是您可以通過其訪問其屬性的句柄。

+0

那麼要調用的函數是單獨的函數,它不在所有與GUI窗口函數相關的使用'handles'。 – Chethan 2013-03-26 18:43:19

+0

好的,但您可以在搜索按鈕回調中訪問「句柄」,因此您可以在**回調中獲得'n'的值,並將其作爲參數傳遞給您的單獨函數。 – wakjah 2013-03-26 18:46:04

+0

是的,我想將它作爲參數傳遞,但是在執行過程中多次調用相同的函數是否會產生任何效果?我需要的是,如果用戶在菜單中選擇'10',我的循環'n'應該被分配爲'10'。所以輸出將是10張圖片。 – Chethan 2013-03-26 18:57:16

1

圍繞GUI傳遞信息的方式是使用handles結構。如果您使用GUIDE handles創建GUI,則應該在打開功能中創建該GUI。您可以修改打開功能,將字段和初始值添加到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中的設置路徑按鈕進行設置。)

+0

那麼被調用的函數是獨立的函數,它與GUI窗口函數使用'handles'完全不相關。上面提到的代碼'for i = 1:n%存儲前n個匹配...'是外部函數,它不在GUI窗口函數中。 – Chethan 2013-03-26 18:45:23

+0

查看我對我的回答所做的編輯。 – Molly 2013-03-26 18:53:22

+0

對不起,我沒有得到'handles.n = 1;'會做什麼..我需要的是如果用戶在菜單中選擇'10',我的for循環'n'應該被賦予'10' ,是的,我想將它作爲參數傳遞,但是在執行過程中多次調用相同的函數會產生什麼效果?所以輸出將是10張圖片。 – Chethan 2013-03-26 19:01:00