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を使用するだけです。str2numstr2double

最後に、独自のコールバックの 1 つの外部からドロップダウンの値にアクセスする必要がある場合は、handlesすべてのコールバックに渡される (またはサンプルでは から返されるguidata) 構造を使用する必要があります。ハンドルには、ドロップダウンと同じ名前のフィールドがあります。これは、そのプロパティにアクセスできるハンドルになります。

于 2013-03-26T18:25:52.363 に答える
1

GUI で情報を渡す方法は、handles構造体を使用することです。GUIDE を使用して GUI を作成した場合handles、オープニング関数で作成されているはずです。開始関数を変更して、フィールドと初期値を に追加できますhandles。たとえば、opening 関数に以下を追加できます。

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 検索パスにあることを確認する必要があります (Matlabaddpathの [パスの設定] ボタンを使用またはクリックして設定できます)。

于 2013-03-26T18:28:13.037 に答える