Установить команду с двумя возможностями для установки значения свойства - PullRequest
2 голосов
/ 27 марта 2011

Для некоторых hobjects в matlab команда set(hobject, 'enable', 'inactive') будет работать нормально.
для других, например кнопок панели инструментов, есть только set(hobject, 'enable', 'off').

Есть ли у меня набор listObjects,
есть что-то вроде set(listObjects, 'enable', ['inactive'|'off']), в котором я установил свойство внеактивен, если он действителен, и выключен, если это недопустимое свойство?

Ответы [ 2 ]

1 голос
/ 27 марта 2011

Если у вас есть только два значения, которые нужно проверить, вы можете использовать блок try/catch.

try
    set(hobject,'enable','inactive');
catch exception
    if strcmp(exception.identifier,'MATLAB:hg:propswch:FindObjFailed')
        set(hobject,'enable','off');
    else
        throw(exception)
    end
end

Таким образом, при первой попытке проверки значения оно проверяется, является ли оно приемлемым. Если нет, он пытается следующий вариант. Если ошибка вызвана чем-то другим (например, вы ввели недопустимое имя свойства), она выводит ошибку на экран.

Кстати, идентификатор ошибки: MATLAB:hg:propswch:FindObjFailed было тем, что я получил на своей машине, когда пытался установить значение, которое свойство не будет принимать. Хотя я подозреваю, что это должно быть то же самое, вы можете посмотреть, что вы получаете на своем компьютере, и использовать это в функции strcmp.

0 голосов
/ 27 марта 2011

Вы можете проверить тип объектов, предварительно прочитав их свойство 'enable'.

enableStatus = get(listOfObjects,'enable');

%# identify who is active and who is on
activeObjects = listOfObjects(strcmp(enableStatus,'active'));
onObjects = listOfObjects(strcmp(enableStatus,'on'));

%# set proper status
set(activeObjects,'enable','inactive')
set(onObjects,'enable','off')
...