Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
RunAll as SetAll but for methods
Message
From
05/10/2006 21:55:33
 
 
To
05/10/2006 02:37:41
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01159583
Message ID:
01159919
Views:
11
>>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

Thanks for your comment, Carlos. Your BindEvent implementation would probably be more efficient that RunAll().

Ken
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform