2014-01-17 2 views

답변

0

요점은 get()set()은 스칼라가 아니라 핸들 벡터에 만족한다는 것입니다. 문제는 그 벡터를 얻고 사용하는 방법입니다. 초기 설정을 저장 이런 식으로, 업데이트 할 기억할 필요가 없습니다 - 동적으로 할

function gui_OpeningFcn(hObject, eventdata, handles, varargin) 
[...] 
handles.panel1controls = [handles.edit1, handles.edit2]; 
handles.panel2controls = [handles.edit3, handles.checkbox1, handles.edit9]; 
[...] 
guidata(hObject, handles); 
end 

function radio1_Callback(hObject, eventdata, handles) 
if (get(handles.radio1, 'Value') == get(handles.radio1, 'Min')) 
    set(handles.panel1controls, 'Enable, 'Off'); 
else 
    set(handles.panel1controls, 'Enable, 'On'); 
end 
end 

function radio2Callback(... 

하거나 : 접근 방법의 몇은 수동으로 각 패널에 대한 핸들의 벡터를 만들 수 있습니다, 여기있다 나중에 컨트롤을 추가/제거하지만 정밀 컨트롤이 덜한 경우

function radio1_Callback(hObject, eventdata, handles) 
if (get(handles.radio1, 'Value') == get(handles.radio1, 'Min')) 
    set(get(handles.panel1, 'Children'), 'Enable, 'Off'); 
else 
    set(get(handles.panel1, 'Children'), 'Enable, 'On'); 
end 
end 

function radio2Callback(... 

을 지금, 여전히 중복 된 코드의 톤 끝나게 라디오 버튼마다 콜백 함수를 필요로한다 : 당신은 어떤 플랫폼에서 비트 쓰레기를 볼 수있는, 너무 텍스트 레이블을 사용하지 않도록 설정합니다. 하나 개의 좋은 깔끔한 일반적인 콜백 함수를 공유하는 그들을 모두 허용의 영리하자 및 UserData를 통해 버튼 자체로 핸들을 연결 :

function gui_OpeningFcn(hObject, eventdata, handles, varargin) 
[...] 
set(handles.radio1, 'UserData', [handles.edit1, handles.edit2]); 
set(handles.radio2, 'UserData', [handles.edit3, handles.checkbox1, handles.edit9]); 
[...] 
end 

function radio_common_Callback(hObject, eventdata, handles) 
if (get(hObject, 'Value') == get(hObject, 'Min')) 
    enable = 'Off'; 
else 
    enable = 'On'; 
end 
set(get(hObject, 'UserData'), 'Enable', enable); 
end 

또는 '동적'전체 패널 접근

,

function gui_OpeningFcn(hObject, eventdata, handles, varargin) 
[...] 
set(handles.radio1, 'UserData', handles.panel1); 
set(handles.radio2, 'UserData', handles.panel2); 
[...] 
end 

function radio_common_Callback(hObject, eventdata, handles) 
if (get(hObject, 'Value') == get(hObject, 'Min')) 
    enable = 'Off'; 
else 
    enable = 'On'; 
end 
set(get(get(hObject, 'UserData'), 'Children'), 'Enable', enable); 
end 

모든 것이 비활성화되도록하는 가장 간단한 방법은 GUIDE에서 그런 식으로 설정하는 것입니다. 그러나 OpeningFcn()의 끝에 프로그래밍 방식으로 프로그래밍 할 수는 없습니다. 사실, 왜 연결의 또 다른 수준으로 한 번에 모든 것을 할 수 없습니다 :

set([handles.panel1controls, handles.panel2controls, ...], 'Enable', 'Off'); 

조차 GUI를가의 matlab에 규칙에서 제외됩니다 ...

"모든 벡터화하려고"