GUI, make a handle disappear
    8 views (last 30 days)
  
       Show older comments
    
    Marc Martinez Maestre
 on 19 Aug 2020
  
    
    
    
    
    Commented: Marc Martinez Maestre
 on 24 Aug 2020
            Hey, I am MArc and I have a question about a GUI. have this GUI interface:

I want to achieve that when clicking both pink clickboxes I want to make all the red handles disappear. I tried with a function using the button 2, like this:
    methods (Access = private)
        function Button2Pushed(app, event,handles)
            value1= get(handles.PRETESSATRECTECheckBox,'Value')==0;
            value2= get(handles.PRETESSATENCASTAMENTCheckBox,'Value')==0;
            value3= get(handles.PRETESSATPARABLICCheckBox,'Value')==1;
            value4= get(handles.ntramsCheckBox,'Value')==1;
            if value1 && value2 && value3&& value4
                set(handles.LmEditField_3, 'Visible', 'off');
                set(handles.readelaseccim2EditField_2, 'Visible', 'off');
                set(handles.LNmEditField_2, 'Visible', 'off');
                set(handles.Inrciam4EditField_2, 'Visible', 'off');
                set(handles.AmpladadelaseccimEditField_2, 'Visible', 'off');
                set(handles.ncordonsEditField_2, 'Visible', 'off');
                set(handles.Sigma_uMPaEditField_2, 'Visible', 'off');
                set(handles.Sigma_yMPaEditField_2, 'Visible', 'off');
                set(handles.CargapermanentKNm2EditField, 'Visible', 'off');
                set(handles.SobrecargavariableKNm2EditField, 'Visible', 'off');
                set(handles.SobrecargavariableKNEditField, 'Visible', 'off');
                set(handles.PuntualKNEditField, 'Visible', 'off');
                set(handlesD_vainammEditField, 'Visible', 'off');
            else
                set(handles.LmEditField_3, 'Visible', 'on');
            end
        end
        end
But it does not work, it does nothing.   I would like some advice, thank you 
6 Comments
  Rik
      
      
 on 20 Aug 2020
				Change this
function CheckBoxValueChanged(app, event)
to this
function CheckBoxValueChanged(app, event)
uiwait(msgbox('the function was called'));
Then you know for sure if it is called or not.
Accepted Answer
  Adam Danz
    
      
 on 19 Aug 2020
        "I want to achieve that when clicking both pink clickboxes I want to make all the red handles disappear. "
The function you shared requires two checkboxes to be not-selected and two to be selected.  That doesn't match your description.  
Also, the checkbox detection needs to happen when any of the applicable checkboxes are toggled.  If the detection only exists in 1 checkbox callback, toggling the other one will have no effect.  
To avoid having 2 copies of the same code, assign the same CheckBoxValueChanged function to each applicable checkbox.  
function CheckBoxValueChanged(app, event)
    % Get values of all checkboxes
    cb(1) = app.CheckBox.Value;
    cb(2) = app.CheckBox2.Value;
    % Toggle the visibility flag depending on checkbox states
    if all(cb)
        visibleFlag = 'off';
    else
        visibleFlag = 'on';
    end
    app.LNmEditField_2.Visible = visibleFlag;
    app.LmEditField_3.Visible = visibleFlag;
    % etc...
end
5 Comments
  Adam Danz
    
      
 on 20 Aug 2020
				Here are the steps you need to take to fix the proble. 
1) Add ValueChangeFcn callback function to one of the check boxes.  Right-click the checkbox to show the menu you see below.  That will add a new function in Code View. 

2) Set up the function I provided in my answer.  Note that the function in my answer is a demo.  You'll need to understand what's going on in that function and adapt it to your needs.  If you have specific questions with that, I can help. 
3) Go back to Design Mode and right-click the other checkbox.  This time, instead of adding a new ValueChangeFcn, you're going to select an existing callback, and select the function you just added.  
4) Clean up the old stuff in your code. 
To test it, I used the first 2 checkboxes to turn off/on a few components in the right column. 

More Answers (1)
  Ruger28
      
 on 19 Aug 2020
        As suggested above, make all of the items you would like to "disappear" (turn visibility off) by lumping them together in a single handle. Below is a quick example I threw together.
% in the opening function before gui is made visible
handles.MyEditBoxes = [handles.edit1,handles.edit2,handles.edit3,handles.edit4,handles.edit5];
Then for your pushbutton, get the values of the two checkboxes, and AND them.
% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
value1 = get(handles.checkbox1,'Value');
value2 = get(handles.checkbox2,'Value');
if value1 && value2
    set(handles.MyEditBoxes,'Visible','off');
else
    set(handles.MyEditBoxes,'Visible','on');
end
This will hide/unhide the items in MyEditBoxes. 
See Also
Categories
				Find more on Data Type Identification in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!



