Это одна из тех проблем, которую можно решить разными способами. Во-первых, я дам вам решение, которое наиболее точно отвечает на ваши вопросы с наименьшим количеством изменений в существующем коде ...
Функции set
и get
могут работать с векторами дескрипторов, поэтому вы можете свести все это к одному вызову функции, чтобы установить все. Если вы хотите установить только флажки, которые были предварительно отмечены (при условии, что остальные по умолчанию не отмечены), вы можете использовать свои сохраненные состояния флажков как логический индекс в векторе дескрипторов своих флажков:
cbHandles = [handles.checkbox1 handles.checkbox2 ... handles.checkbox14]; % All handles
cbStates = [checkbox1 checkbox2 ... checkbox14]; % All states
set(cbHandles(logical(cbStates)), 'Value', 1);
В качестве альтернативы, вы можете просто установить все состояния (отмеченные или не отмеченные) следующим образом:
set(cbHandles, {'Value'}, num2cell(cbStates(:)));
Как видите, это будет проще, если вы сохраните свои маркеры-флажки и каждый из них будет представлен в виде вектора, а не нескольких переменных.
Альтернативы
Вот несколько альтернативных способов решить или улучшить это, что потребует немного большего изменения существующего кода:
Видимость окна
Вместо того, чтобы повторно открывать и закрывать окно с вашими флажками, вы можете просто создать его один раз, а затем настроить его 'Visibility'
свойство , чтобы оно появлялось и исчезало. Даже когда они не видны, все компоненты окна (т.е. флажки) все еще существуют, и к их состояниям можно обращаться с помощью дескрипторов, хранящихся в вашей структуре handles
. Это позволяет избежать необходимости сохранять их состояния в глобальных переменных или устанавливать их состояния при повторном открытии окна.
Избегайте глобалов
Структура handles
, в отличие от ее имени (поскольку она может называться как угодно), представляет собой обычную структуру , которая может хранить любые данные, а не только графические дескрипторы. В вашей функции закрытия (или там, где вы храните состояния флажков перед закрытием), вы можете просто добавить состояния в структуру handles
:
handles.cbStates = get(handles.cbHandles, 'Value');
guidata(hObject, handles);
Предполагается, что ваши маркеры-флажки хранятся в векторе cbHandles
. Затем вы обновите состояния в вашей функции открытия следующим образом:
set(handles.cbHandles, {'Value'}, handles.cbStates);