2017-01-04 2 views
-1

MATLABでいくつかの条件をチェックする独自の関数を作成したいが、そこにhandlesを送信する方法がわからない。最後に、この他の機能からGUIにテキストをいくつか印刷したいと思います。この関数ではhandles.t1を直接使用することはできません。これは、関数内からアクセスできないためです。どうすればそれを渡すことができますか?「ハンドル」を使用してGUIDE GUI内の自分の関数でテキストを印刷

function y = check(tab) 
    if all(handles.tab == [1,1,1]) 
      set(handles.t1, 'String', 'good'); 
     else 
      set(handles.t1, 'String', 'bad'); 
    end 
end 

編集

コメントと最初の答えの後、私は私が私の関数を呼び出す、全体のコールバックを置くことにしました:

function A_Callback(hObject, eventdata, handles) 
if handles.axesid ~= 12 
    handles.axesid = mod(handles.axesid, handles.axesnum) + 1; 
    ax = ['dna',int2str(handles.axesid)]; 
    axes(handles.(ax)) 
    matlabImage = imread('agora.jpg'); 
    image(matlabImage) 
    axis off 
    axis image 
    ax1 = ['dt',int2str(handles.axesid)]; 
    axes(handles.(ax1)) 
    matlabImage2 = imread('tdol.jpg'); 
    image(matlabImage2) 
    axis off 
    axis image 
    handles.T(end+1)=1; 
    if length(handles.T)>2 
     check(handles.T(1:3)) 
    end 
end 
guidata(hObject, handles); 
+0

「自分の機能」はもっと曖昧になりますか?これはプログラム的なGUIの一部ですか? GUIDE GUI?ランダムMATLAB関数?クラス定義?スクリプト?この関数はどのように呼び出されますか?参照:[mcve] – excaza

+0

はい、これはGUIDEのGUIです。私が "私自身の関数"を書く時、私はそれがコールバック関数とは違うと思った。この関数は "check"と呼ばれ、配列に "if"と同じ値があるかどうかをチェックします。私が必要とするのは、私自身の宣言された関数で "handles(whatever_here)"をどのように使うことができるかという知識です。 – soommy12

答えて

2

あなたはhandles構造体を取得するためにguidataを使用する必要がありますそのGUIDEはコールバック間を自動的に渡します。また、figureのハンドルを用意してguidataを取得し、Tagプロパティ(例ではmytagを使用しました)と組み合わせてfindallと組み合わせて使用​​します。入力引数tabはあなたの姿は、あなただけhandles構造体を得るためにそのguidataを呼び出すことができます内グラフィックスオブジェクトへのハンドルがある場合

handles = guidata(findall(0, 'type', 'figure', 'tag', 'mytag')); 

handles = guidata(tab); 

更新

ご質問の更新では、check直接コールバックから、単にあなたの関数に必要な変数を渡し、その後、通常

function y = check(tab, htext) 
    if all(tab == [1 1 1]) 
     set(htext, 'String', 'good') 
    else 
     set(htext, 'String', 'bad') 
    end 
end 

それらで動作し、その後、別の方法として

if length(handles.T) > 2 
    check(handles.T(1:3), handles.t1); 
end 

あなたのコールバックの中から、あなたが全体を渡すことができますhandlesあなたの構造にcheck構造体

function check(handles) 
    if all(handles.tab == [1 1 1]) 
     set(handles.t1, 'string', 'good') 
    else 
     set(handles.t1, 'String', 'bad') 
    end 
end 

あなたのコールバック内

if length(handles.T) > 2 
    check(handles) 
end 
+0

私は全くのアイデアを得ることはありません。私は質問を更新しました。あなたは私の問題に指定された、より詳細な答えを教えてくれますか? – soommy12

+1

@Buszman GUIDE guiの 'Tag'プロパティを知っていますか?プロパティで設定できるはずです。代わりに、私はあなたの 'check'関数に直接必要な情報を渡す方法を示すアップデートに基づいてアップデートを提供しました。 – Suever

+0

私はTagプロパティを知らない。どうすれば確認できますか?4つのテキストボックス(t1、t2、t3、t4)があるので、ハンドル全体を渡す必要があると思います。 – soommy12

関連する問題