Команда set с двумя возможностями установки значения свойства

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

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


person shahar_m    schedule 27.03.2011    source источник


Ответы (2)


Если у вас есть только два значения, которые вам нужно проверить, вы можете использовать блок 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.

person abcd    schedule 27.03.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')
person Jonas    schedule 27.03.2011