Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
RunAll as SetAll but for methods
Message
From
05/10/2006 12:49:33
Dragan Nedeljkovich (Online)
Now officially retired
Zrenjanin, Serbia
 
 
To
05/10/2006 00:30:07
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01159583
Message ID:
01159753
Views:
14
>While SetAll() can be used to change all properties, I sometimes want to run a method on all of my edit controls in a form. These controls can be in containers, grids or pages of a page frame so I only want to run the method for those objects having it - but I want to drill down into containers (that don't have the method.
>
>So, I've written a RunAll() method for my form. Here's the code. I'd like this to be a public domain sort of thing with anyone modifying the code to make it more robust. Any comments?

What if your object has the method AND has members with that method? Since the first case will fire, it will never recurse through its members.

You may look up my recurse class (click on my name in message headers, look up contributions) - it's fairly easy to do something like this with it.

>
>LPARAMETERS oObj, cMethod
>LOCAL nX, oComp
>DO CASE
>
>* If this object has the method, run it
>CASE PEMSTATUS(oObj, cMethod, 5)
>    EVALUATE ([oObj.] + cMethod + "()")
>
>* If this doesn't have a baseclass we can get to... (VFPSkins has this issue)
>CASE PEMSTATUS(oObj, [BaseClass], 2)
>    *...we don't know  to do
>	
>* If this has a Controls array, go thru each component
>CASE PEMSTATUS(oObj, [ControlCount], 5) AND oObj.ControlCount > 0
>    FOR nX = 1 TO oObj.ControlCount
>        oComp = oObj.Controls[nX]
>        THISFORM.RunAll(oComp, cMethod)
>    ENDFOR
>
>* If this is a Grid, go thru each column
>CASE oObj.BaseClass = [Grid] AND oObj.ColumnCount > 0
>    FOR nX = 1 TO oObj.ColumnCount
>        oComp = oObj.Columns[nX]
>        THISFORM.RunAll(oComp, cMethod)
>    ENDFOR
>
>* If this is a PageFrame, go thru each page
>CASE oObj.BaseClass = [Pageframe] AND oObj.PageCount > 0
>    FOR nX = 1 TO oObj.PageCount
>        oComp = oObj.Pages[nX]
>        THISFORM.RunAll(oComp, cMethod)
>    ENDFOR
>
>* If we got here, we can't do anything with this object
>ENDCASE
>

back to same old

the first online autobiography, unfinished by design
What, me reckless? I'm full of recks!
Balkans, eh? Count them.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform