exponenta event banner

findobj

Класс: дескриптор

Поиск объектов-дескрипторов

Синтаксис

Hmatch = findobj(H)
Hmatch = findobj(H,property,value,...,property,value)
Hmatch = findobj(H,'-not',property,value)
Hmatch = findobj(H,'-regexp',property,expression)
Hmatch = findobj(H,property,value,logicaloperator,property,value)
Hmatch = findobj(H,'-function',fh)
Hmatch = findobj(H,'-function',property,fh)
Hmatch = findobj(H,'-class',class)
Hmatch = findobj(H,'-isa',class)
Hmatch = findobj(H,'-property',property)
Hmatch = findobj(H,'-method',methodname)
Hmatch = findobj(H,'-event',eventname)
Hmatch = findobj(H,'-depth',d,___)

Описание

Hmatch = findobj(H) возвращает объекты, перечисленные в H и всех их потомков.

Hmatch = findobj(H,property,value,...,property,value) находит handle объекты с заданным значением свойства.

Hmatch = findobj(H,'-not',property,value) инвертирует выражение в следующем property value пара. То есть найти объекты, указанное свойство которых не равно value.

Hmatch = findobj(H,'-regexp',property,expression) использует регулярное выражение, определенное в expression для поиска свойств с определенными значениями. Не все классы поддерживают использование регулярного выражения для поиска значений свойств.

Hmatch = findobj(H,property,value,logicaloperator,property,value) применяет логический оператор к парам имя/значение. Поддерживаемые логические операторы:

  • '-or'

  • '-and' (по умолчанию, если оператор не указан)

  • '-xor'

Hmatch = findobj(H,'-function',fh) вызывает дескриптор функции fh на объектах в H и возвращает объекты, для которых функция возвращает true.

Hmatch = findobj(H,'-function',property,fh) вызывает дескриптор функции fh по значению указанного свойства для объектов в H и возвращает объекты, для которых функция возвращает true. Функция должна возвращать скалярное логическое значение.

Hmatch = findobj(H,'-class',class) находит все объекты, принадлежащие указанному классу.

Hmatch = findobj(H,'-isa',class) находит все объекты, принадлежащие указанному классу.

Hmatch = findobj(H,'-property',property) находит все объекты в H с именованным свойством.

Hmatch = findobj(H,'-method',methodname) находит объекты с указанным именем метода.

Hmatch = findobj(H,'-event',eventname) находит объекты с указанным именем события.

Hmatch = findobj(H,'-depth',d,___) указывает, сколько уровней в иерархиях экземпляров под объектами в H для поиска.

Указать все -options в виде векторов символов или строковых скаляров.

Входные аргументы

развернуть все

Объекты для поиска, указанные как массив дескрипторов объектов. Если только вы не указали '-depth' опция, findobj поиск объектов во входном массиве H и дочерние объекты в иерархии экземпляров.

Имя свойства, указанное как текст в кавычках с учетом регистра.

Типы данных: char | string

Класс объекта для поиска, указанный как текст с учетом регистра, в кавычках.

Типы данных: char | string

Значение свойства, указанное как значение или выражение MATLAB ®.

Имя метода, указанное как текст в кавычках с учетом регистра.

Типы данных: char | string

Имя события, указанное как текст в кавычках с учетом регистра.

Типы данных: char | string

Глубина поиска, заданная как целое число, указывающее количество уровней ниже любого заданного объекта во входном массиве H.

  • d = n - Поиск n уровни иерархии под каждым объектом в H

  • d = 0 - Поиск только на том же уровне, что и объекты в H.

  • d = inf - Поиск на всех уровнях ниже объектов в H. Это значение по умолчанию.

Дескриптор функции, указывающий функцию, которая вычисляется для каждого объекта во входном массиве H. Эта функция должна возвращать скалярное логическое значение, указывающее, существует ли совпадение (true) или нет (false).

Выходные аргументы

развернуть все

Объекты, найденные в результате поиска, возвращены в виде массива дескрипторов.

Признаки

Accesspublic

Сведения об атрибутах методов см. в разделе Атрибуты метода.

Примеры

Объект со значением свойства

Найдите объект с определенным значением свойства. Учитывая handle класс, BasicHandle:

classdef BasicHandle < handle
   properties
      Prop1
   end
   methods
      function obj = BasicHandle(val)
         if nargin > 0
            obj.Prop1 = val;
         end
      end
   end
end

Создание массива BasicHandle объекты:

h(1) = BasicHandle(7);
h(2) = BasicHandle(11);
h(3) = BasicHandle(27);

Найти дескриптор объекта, чей Prop1 свойство имеет значение 7:

h7 = findobj(h,'Prop1',7);
h7.Prop1
ans =

     7

Объект с определенным именем свойства

Найдите объект с определенным динамическим свойством. Учитывая button класс:

classdef button < dynamicprops
   properties
      UiHandle
   end
   methods
      function obj = button(pos)
         if nargin > 0
            if length(pos) == 4
               obj.UiHandle = uicontrol('Position',pos,...
                'Style','pushbutton');
            else
               error('Improper position')
            end
         end
      end     
   end   
end

Создайте массив объектов-кнопок, только один элемент которых определяет динамическое свойство. Использовать findobj для получения дескриптора объекта с динамическим свойством ButtonCoord:

b(1) = button([20 40 80 20]);
addprop(b(1),'ButtonCoord');
b(1).ButtonCoord = [2,3];
b(2) = button([120 40 80 20]);
b(3) = button([220 40 80 20]);

h =  findobj(b,'-property','ButtonCoord');
h.ButtonCoord
ans =

     2     3

Поиск объектов с помощью регулярных выражений

Поиск объектов на основе значения свойств объектов с помощью регулярных выражений. В то время как findobj имеет -regexp параметры, не все классы поддерживают этот параметр. В этом примере используется -function использование регулярного выражения из функции в качестве альтернативы -regexp вариант.

Этот класс определяет статический метод, строящий массив объектов. Каждый объект имеет Name свойство, содержащее символ, представляющий номер элемента массива.

classdef FindRegExpr < handle
    properties
        Name
    end
    methods (Static)
        function b = regXArray
            b = FindRegExpr.empty(0,50);
            for i = 1:50
                b(i).Name = sprintf('%d',i);
            end
        end
    end
end
A = FindRegExpr.regXArray;
a = 

  1×50 FindRegExpr array with properties:

    Name

Поиск объектов, чьи Name свойство содержит вектор символов, начинающийся с символа '1'.

subArray = findobj(a, '-function', 'Name', @(x) ~isempty(regexp(x, '^1\d*')));
subArray = 

  11×1 testRegExpr array with properties:

    Name

Совет

  • findobj имеет доступ только к публичным членам.

  • Если нет совпадений, findobj возвращает пустой массив того же класса, что и входной массив H.

  • Приоритет логического оператора соответствует правилам приоритета MATLAB. Дополнительные сведения см. в разделе Приоритет оператора.

  • Управление приоритетом путем группирования в массивах ячеек

См. также

Представлен в R2008a