Bonjour à tous,

En cours de création d'une UI par codage manuel, je cherche à jouer avec la propriété "Visible" de certains de ses composants afin de s'assurer que l'utilisateur progresse bien dans l'ordre attendu par l'outil.

J'en viens donc à chercher à rendre visible des composants (uicontrol,uieditfield etc...) en fonction de quel radiobutton est sélectionné dans mon uibuttongroup UI_bg_MCU.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
% MCU sheet
UI_e_files_2=uicontrol(UI_p_func,'Style','Popupmenu','String',{'MCU sheet name'},'Position',[0.18*Size_3 0.11*Size_4 0.35*Size_3 0.03*Size_4],'Visible','off');
UI_l_files_4=uilabel(UI_p_func,'Text','MCU sheet :','Position',[0.01*Size_3 0.11*Size_4 0.17*Size_3 0.03*Size_4],'BackgroundColor',"w",'Visible','off');
 
% MCU characterization
UI_bg_MCU = uibuttongroup('Parent',UI_p_func,'Position',[0.01*Size_3 0.15*Size_4 0.325*Size_3 0.08*Size_4],'BackgroundColor',"w",'Visible','on','SelectionChangedFcn',@(src,event) bg_MCU(UI_e_files_2,UI_l_files_4));
    UI_rb_1 = uicontrol('Parent',UI_bg_MCU,'Style','radiobutton','String','No MCU characterization','Position',[0.01*Size_3 0.0525*Size_4 0.3*Size_3 0.025*Size_4],'BackgroundColor',"w");
    UI_rb_2 = uicontrol('Parent',UI_bg_MCU,'Style','radiobutton','String','MCU characterization','Position',[0.01*Size_3 0.0275*Size_4 0.3*Size_3 0.025*Size_4],'BackgroundColor',"w");
    UI_rb_3 = uicontrol('Parent',UI_bg_MCU,'Style','radiobutton','String','MCU model','Position',[0.01*Size_3 0.0025*Size_4 0.3*Size_3 0.025*Size_4],'BackgroundColor',"w");
 
% MCU sheet selection
function bg_MCU(UI_e_files_2,UI_l_files_4)
    set(UI_e_files_2,'Visible','on')
    set(UI_l_files_4,'Visible','on')
end
Je voudrais modifier le code précédent afin qu'il ne rende visible UI_e_files_2 et UI_l_files_4 que lorsque UI_rb_2 est sélectionné (et donc les cache dans les autres cas).
Un peu dans cette idée là :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
function bg_MCU(UI_e_files_2,UI_l_files_4)
    Active_rb=get(UI_bg_MCU,'SelectedObject');
    switch Active_rb
        case 'UI_rb_1'
% ...
        case 'UI_rb_2'
            set(UI_e_files_2,'Visible','on')
            set(UI_l_files_4,'Visible','on')
        case 'UI_rb_3'
% ...
end
Je ne sais pas trop comment écrire le callback dans UI_bg_MCU ni la fonction en elle même pour ce qui s'agit des arguments.
UI_bg_MCU ne peut être passé en argument dans son propre callback
UI_rb_1/2/3 ne sont pas disponibles non plus car créer après la ligne d'appel au callback
Je crois qu'il me faut jouer avec l'équivalent en codage manuel de eventdata (c'est 'event' dans @(src,event) avant le callbakc ?) mais je ne sais pas comment l'inclure dans les paramètres du callback ni de la fonction.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
% function UI_bg_MCU(hObject,eventdata,handles)
% newButton=get(eventdata.NewValue,'tag');
D'avance merci pour votre temps, j'espère que mon message est clair sans être trop brouillon.