2016-07-10 23 views
0

次のコードは3つのラジオボタンを作成します。選択機能は、適切なコンテンツが表示される確認します:Matlab R2015bコード別ラジオボタン選択

function myui 
bg = uibuttongroup('Visible','off',... 
        'Position',[0 0 .2 1],... 
        'SelectionChangedFcn',@bselection); 

% Create three radio buttons in the button group. 
r1 = uicontrol(bg,'Style','radiobutton',... 
        'String','Option 1',... 
        'Position',[10 350 100 30],... 
        'HandleVisibility','off'); 

r2 = uicontrol(bg,'Style','radiobutton',... 
        'String','Option 2',... 
        'Position',[10 250 100 30],... 
        'HandleVisibility','off'); 

r3 = uicontrol(bg,'Style','radiobutton',... 
        'String','Option 3',... 
        'Position',[10 150 100 30],... 
        'HandleVisibility','off'); 

% Make the uibuttongroup visible after creating child objects. 
bg.Visible = 'on'; 

    function bselection(source,callbackdata) 
     display(['Previous: ' callbackdata.OldValue.String]); 
     display(['Current: ' callbackdata.NewValue.String]); 
     display('------------------'); 
    end 
end 

私は(ユーザーがクリックされていない)コードあたりを示す選択と内容を変更したいと思います。 Iのようにコードごとラジオボタンの選択を設定することができます。これは正しいラジオボタンの青いドットを描画

set(bg, 'SelectedObject', r2); 

(選択されたと思われる)、しかし、正しい内容が示されていません。 私は 'SelectionChangedFcn'を手で呼び出す必要があると思います。これは、 'callbackdata'を要求することができません。これは 'matlab.ui.eventdata.SelectionChangedData'クラスであり、まだドキュメントがありません。

質問:ラジオボタンの変更をコーディングするときに 'outside'からSelectionChangedFcnを呼び出すには 'callbackdata'を自分で作成する必要がありますか、別の方法がありますか?

質問2:私は「HandleVisibility」が有用である理由とその理由について、小さなヒントをあげています.MatLabのドキュメントはあまりにも謎です。

答えて

0

最初に、質問2について:ラジオボタンでHandleVisibilityoffに設定すると、uibuttongroupのハンドル内のハンドルにアクセスすることはできません。

bg.Children 

ans = 

    0x0 empty GraphicsPlaceholder array. 

そしてonHandleVisibilityと::offからHandleVisibilityとの例として

bg.Children 

ans = 

    3x1 UIControl array: 

    UIControl (Option 3) 
    UIControl (Option 2) 
    UIControl (Option 1) 

それはあなたのラジオボタンにアクセスする方法に依存。

、プログラムの機能をコールバックへの呼び出しについて、私は(あなたがonHandleVisibilityを設定し、その場合になります)の代わりにSelectionChangedFcnを使用する独自のコールバック関数をコーディングすることができ提案します。 このソリューションは私のために働きます:

function myui 

    figure 
    bg = uibuttongroup('Visible','off',... 
         'Position',[0 0 .2 1]); 

    % Create three radio buttons in the button group. 
    r1 = uicontrol(bg,'Style','radiobutton',... 
         'String','Option 1',... 
         'Position',[10 350 100 30],... 
         'HandleVisibility','on'); 

    r2 = uicontrol(bg,'Style','radiobutton',... 
         'String','Option 2',... 
         'Position',[10 250 100 30],... 
         'HandleVisibility','on'); 

    r3 = uicontrol(bg,'Style','radiobutton',... 
         'String','Option 3',... 
         'Position',[10 150 100 30],... 
         'HandleVisibility','on'); 

    % Make the uibuttongroup visible after creating child objects. 
    bg.Visible = 'on'; 

    % Use here your own way to switch the buttons, I use a simple vector as a counter 
    CounterToSelect = [1 2 3 1 2 3 1 2 3]; 
    for k=1:length(CounterToSelect); 
     pause(1) 
     previousChild = bg.SelectedObject; 
     selectedChild = bg.Children(CounterToSelect(k)); 
     bg.SelectedObject = selectedChild; 
     DisplayInfoChildren(previousChild, selectedChild); 
    end 

end 

function DisplayInfoChildren(previousChild, selectedChild) 
    display(['Previous: ' previousChild.String]); 
    display(['Current: ' selectedChild.String]); 
    display('------------------'); 
end 
関連する問題