Forum Discussion

aadzhigitov's avatar
aadzhigitov
New Contributor
2 years ago
Solved

FindAll by alternative properties

Hi!

I am using the FindAll method to find all objects of a certain classes on a form. For example:

 

 

Object.FindAll('WndClass', 'regexp:^((Button)|(TButton)|(TcxButton)|(TdxBarButton)|(TdxLargeBarButton))$', 20);

 

 

But some of the objects that I need are not windows and do not have the WndClass property (for example, BarButtons from DevExpress). Because of this, I have to call FindAll twice, to search by WndClass and ClassName:

 

 

Object.FindAll('WndClass', 'regexp:^((Button)|(TButton)|(TcxButton))$', 20);
Object.FindAll('ClassName', 'regexp:^((TdxBarButton)|(TdxLargeBarButton))$', 20);

 

 

My question is - it possible to call FindAll once to find objects of the specified alternative properties satisfies the condition. Something like this:

 

 

Object.FindAll('WndClass|ClassName', 'regexp:^((Button)|(TButton)|(TcxButton)|(TdxBarButton))$', 20);

 

 

Would be grateful for any advice.

  • Hi,

     

    is - it possible to call FindAll once to find objects of the specified alternative properties

    I am afraid this is not possible. If I remember it right, documentation says that 'or' condition (via regexp) can be used for property values only, but not for the property names. That is why I think that what you are looking for is not possible (at the moment, hopefully) and I do not have at the moment any better idea than two subsequent calls to .FindAll() like you do now.

6 Replies

  • rraghvani's avatar
    rraghvani
    Champion Level 3

    From my understanding, to do OR, you'll have to use another FindAll.

    • aadzhigitov's avatar
      aadzhigitov
      New Contributor

      Yes, but that's the problem, because calling FindAll twice is too slow

  • AlexKaras's avatar
    AlexKaras
    Champion Level 3

    Hi,

     

    is - it possible to call FindAll once to find objects of the specified alternative properties

    I am afraid this is not possible. If I remember it right, documentation says that 'or' condition (via regexp) can be used for property values only, but not for the property names. That is why I think that what you are looking for is not possible (at the moment, hopefully) and I do not have at the moment any better idea than two subsequent calls to .FindAll() like you do now.

    • aadzhigitov's avatar
      aadzhigitov
      New Contributor

      When passing arrays of properties/values to FindAll, it will search by matching each property to each value. That is,  FindAll(['WndClass', 'ClassName'], ['Button', 'TButton'], 20)   will find objects that have WndClass='Button' AND ClassName='TButton'.


      What I need is the ability to write something like  FindAll(['WndClass', 'ClassName'], 'Button', 20)  and find objects that have WndClass='Button' OR ClassName='Button'