2017-06-29 14 views
0

ラジオボタンが定義されたuibuttongroupがあります。私は対応するプロパティで定義されたUipanelsを持っています。私がしたいのは、1つのラジオボタンをクリックして1つのUipanelを表示させ、次に他のラジオボタンをクリックして他のUipanelを表示させることです。私のコードの抜粋です:ラジオボタンを押したときに値を表示するパネルを作成する

operation_type_1 = uibuttongroup(S.Test, 'Title', 'Operation Type', 'position', [0 0.3 panel_w/2 0.15]); 
uicontrol('Parent',operation_type_1, 'Style', 'radiobutton',... 
       'String', 'invisible',... 
       'position', [0 0 0 0], 'Tag', 'invisibutton'); 

uicontrol('Parent',operation_type_1,'Style','radiobutton',... 
       'String', 'Time Operation',... 
       'Position', 100*[0.1 flooring(3.5, 'tp') 1.2 0.15], 'Tag', 'timeop1'); 

uicontrol('Parent',operation_type_1,'Style','radiobutton',... 
       'String', 'Volume Operation',... 
       'Position', 100*[0.1 flooring(2.5, 'tp') 1.2 0.15], 'Tag', 'volumeop1'); 

これは私のボタングループと2つのラジオボタンを定義しています。

Volume Panel

と同様にタイムパネル:

それからボリュームパネルを作成するコードを有する

Time Panel

これらは同じ位置にあります。私がしたいのは、 "Time Operation"ラジオボタンをクリックして時間パネルを表示させ、 "Volume Operation"ラジオボタンをクリックするとボリュームパネルが見えるようにすることです。

私はswitch caseステートメントを実行しようとしました。私は間違いはないが、結果は得られない。たとえば、時間と音量パネルのケースステートメントは次のとおりです。

switch str 
    case 'timeop1' 
    if U.Value; S.result_panel_time1.Visible = 'On'; 
    else S.result_panel_time1.Visible = 'Off'; 
    end 

    case 'volumeop1' 
    if U.Value; S.result_panel_volume1.Visible = 'On'; 
    else S.result_panel_volume1.Visible = 'Off'; 
end 

これを動作させるにはどうすればよいですか?私はGUIDEを使用せず、MATLAB GUIをコーディングしています。私は、コールバックを実装しようとした

UPDATE

は、以下の提案が、私は「関数の定義は、紛失したり、不適切なネストされている。」GETエラー。私timeop1とvolumeop1に私はコールバックを追加しました

function button_callback(U, varargin{2}) 
    switch get(get(operation_type_1, 'SelectedObject'), 'Tag') 
     case 'timeop1' 
      if U.Value; S.result_panel_time1.Visible = 'On'; 
      else S.result_panel_time1.Visible = 'Off'; 
      end 
     case 'volumeop1' 
      if U.Value; S.result_panel_volume1.Visible = 'On'; 
      else S.result_panel_volume1.Visible = 'Off'; 
      end 
    end 
end 

そして "... 'コールバック'、{@pb_call、S}":私は次の関数を使用します。 (私が持っている他のすべての機能は、pb_call.mという.mファイルにあります)。この関数はネストされているようですが、エラーは正確なものを指しています。

答えて

0

あなたのRadioButtonにはcallbackを定義していないようです。例えば、volumeop1のための設定のコールバック:

uicontrol('Parent',operation_type_1,'Style','radiobutton',... 
       'String', 'Volume Operation',... 
       'Position', 100*[0.1 0.3 1.2 0.15], 'Tag', 'volumeop1', ... 
       'Callback', @switchPanel); 

はその後、機能switchPanelに、あなたは、設定された他の人が見えないながら、目に見えるパネルに対応します。

これはあなたの質問に答えようとしていますが、あなたが望むのはuitabです。

+0

私は私はあなたの提案を実施してきた方法で私の質問を更新しました。あなたは修正を提案できますか?これが解決すれば私はあなたの答えを喜んで受け入れるでしょう。 – Morgan

0

私のパートナーがそれを固定してしまった:

コールバックが{コールバック、S}およびS、Uだった、とstrた:

S = varargin{3}; %main figure handle 
U = varargin{1}; %current uicontrol 
str = char(U.String); 

問題が結果から、ラジオボタンの作成で発生しましたラジオボタンがトリガーされた後にパネルが作成されていたため、目に見えない/目に見えるものは何もなく、エラーが発生しました。

しかし、コールバックが以前定義されたものだけでなく、すべてのGUIパーツに影響を与える可能性がある場合は非常に便利です。私は過去にguidataを使ってみましたが、目標を達成するために他の方法を使わなくてはなりませんでした。私は、作業サンプルを使用して将来的にそれらを構築しようとしますが、現在私はプロジェクトの別の部分に取り組んでおり、後でそれに戻ります。

しかし、guidata/setappdataなどを使用すると、自分で解決することができます。これは、変更しようとしているオブジェクトがボタンの前にコールバックをトリガしていることを確認しています。

(彼はまた、私はMATLABの回答でこれと同じ質問をした場所にこの回答を掲載。)

関連する問題