Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
RunAll as SetAll but for methods
Message
From
05/10/2006 02:37:41
 
 
To
05/10/2006 00:30:07
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01159583
Message ID:
01159590
Views:
12
>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?
>
>
>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
>
You can use the OBJECTS collection and avoid repeating the code for containers, grids, pageframes.

Snip example from one of my classes:
Lparameters toObject

Local loChildObject As Control

If Pemstatus(m.toObject, [MouseWheel], CON_PEMSTAT_DEFINED)
	Bindevent(m.toObject, [MouseWheel], This, [MouseWheel], 1)
Endif

If Pemstatus(m.toObject, [Objects], CON_PEMSTAT_DEFINED)
	For Each m.loChildObject In m.toObject.Objects
		This.ctl32_BindMouseWheel(m.loChildObject)
	Endfor
Endif
Carlos
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform