2017-01-23 1 views
0

Ich versuche, den Status Enabled eines Kontrollkästchens in einer Matlab/Simulink-Maske (GUI) je nach dem Status eines anderen Kontrollkästchens festzulegen. Mit anderen Worten: Wenn das Kontrollkästchen A aktiviert ist, muss das Kontrollkästchen B deaktiviert (grau) werden. Ich habe versucht, eine Callback-Funktion auf das Kontrollkästchen A zu verwenden:Wie kann ich eine Matlab/Simulink-Maske abhängig vom Zustand der Maske ändern?

box_A = get_param(gcb, 'checkBoxA'); 
m = Simulink.Mask.get(gcb); 
box_B = m.getParameter('checkBoxB'); 

if strcmp(box_A, 'on') 
    box_B.set('Enabled', 'off'); 
end 

Aber wenn ich die Maske öffnen, erhalte ich eine Fehlermeldung:

-->Error evaluating 'MaskCallback' callback of TEST block (mask) 'test_simulink /Test test'. -->Invalid inputs specified for method 'set' -->Attempt to modify mask parameter name of block 'test_simulink/Test test' in its MaskCallbacks. Changing mask parameter name as part of MaskCallbacks is not allowed.

Wie kann ich mein erstes Ziel erreichen?

+0

Ich sehe nichts falsch mit Code. Haben Sie überprüft, ob Parameternamen korrekt sind und ob Sie in der MATLAB-Befehlszeile dasselbe tun können? – Navan

+0

Von der Matlab-Befehlszeile aus funktioniert es, d. H. Nachdem ich box_B.set ('Enabled', 'off') ausgegeben habe; und öffnen Sie die GUI erneut, Kontrollkästchen B ist ausgegraut. – lineinthesand

Antwort

1

Ich habe endlich die Lösung gefunden; Der Trick besteht nicht darin, die set-Funktion zu verwenden, sondern der Enabled-Eigenschaft zuzuweisen:

box_A = get_param(gcb, 'checkBoxA'); 
m = Simulink.Mask.get(gcb); 
box_B = m.getParameter('checkBoxB'); 

if strcmp(box_A, 'on') 
    box_B.Enabled = 'off'; 
else 
    box_B.Enabled = 'on'; 
end 
Verwandte Themen