Change string of static text boxes whose tag contains "Output"
Mostrar comentarios más antiguos
Hi all,
I am writing some analysis software in 2015a with GUIDE.
I am looking to push a button that will reset the GUI to how it opened, emptying (by setting string) ALL edit boxes (easy) and all static text fields that are used as an output. I do not want to empty static text boxes whose tag contains "Text" as these are GUI labels next to edit boxes.
Currently I have the code below, but I don't know how to adapt it for the above...
% Empty All Static Text Boxes Whose Tag Contains "Output"
set(findall(handles.figure1,'Tag','Output'),'string',''); % findall finds invisible objects as well (findobj does not)
My previous attempt was:
% Get All Static Text Tags
AllStaticTextTags = findall(handles.figure1,'style','text')
% Find All Static Text Tags Containing "Output"
StaticTextTagsContainingOutputIdx = contains(AllStaticTextTags,'Output'); % returns 1 if contains it 0 if not
StaticTextTagsContainingOutput = AllStaticTextTags(StaticTextTagsContainingOutputIdx);
% Empty All Static Text Boxes Whose Tag Contains "Output"
set(StaticTextTagsContainingOutput,'string','');
But understandably that doesn't work due to:
Undefined function 'contains' for input arguments of type 'matlab.ui.control.UIControl'.
Currently I am closing the window and re-running the main script but this is slow and inefficient.
EDIT: To clarify, the tags contain other letters also... I am looking to ONLY empty strings of static text boxes that have "Output" in their tag name.
Thanks,
Matt.
3 comentarios
Dennis
el 10 de Jul. de 2018
Do you have other objects with 'output' tag? If not this should work:
txthandle=findobj(handles.figure1,'Tag','Output')
for k=1:numel(txthandle)
txthandle(k).String=[''];
end
Matt
el 10 de Jul. de 2018
The handles of all your GUI components are stored directly on the handles struct. I would have thought it would be faster to interrogate its fields using something like
names = fieldnames( handles );
idx = contains( fieldnames( handles ), 'Output' );
names = names( idx );
for n = 1:numel( names )
handles.( names{ n } ).String = [];
end
That is off the top of my head and may contain errors.
Using findall seems very inefficient for a self-contained GUI and seems a very brittle way of doing things though. Personally I would keep an array of the relevant text handles that I populate at the creation of the UI if I were to do this. Then setting them to empty would be trivial.
Respuesta aceptada
Más respuestas (0)
Categorías
Más información sobre App Building en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!