Ok, I can deal with that. Don't understand it, but I can deal with it.
But how about explaining these 2 examples:
myform.method()
LOCAL lo, lc, loParent
lo = 'some text'
lc = WPARENT( THIS.NAME )
FOR EACH lo IN _VFP.FORMS
IF UPPER( lo.NAME ) == UPPER( lc )
loParent = lo
EXIT
ENDIF
ENDFOR
IF TYPE( 'loParent.NAME' ) = 'C' ;
AND loParent.WINDOWSTATE = 1
loParent.WINDOWSTATE = 0
loParent.REFRESH()
ENDIF
Obviously VFP is working with the local variable that I set to 'some text', it was changed from character to .F.
I'm guessing that means that a for each loop confiscates a variable from the method for it's own use, but doesn't restore the value back when it's done, instead it just sets it's value to .f.
LOCAL lc, la( 5 )
la( 1 ) = 'A'
la( 2 ) = 'B'
la( 3 ) = 'C'
la( 4 ) = 'D'
la( 5 ) = 'E'
FOR EACH lc IN la
IF lc = la( 3 )
EXIT
endif
ENDFOR
? lc
So I guess a for each loop only confiscates variables and sets them to false if I'm cycling through objects. Cycling through characters leaves it just the way I would expect.
Is there any logic to that? or is it just a "feature" I have to live with?
>Your FOR EACH...ENDFOR creates and uses its own copy of the lo var, not the one from your Local declaration.
>
>You have to transfer the object reference to a an actual memory variable like you have done in your second example and that is why it works.
>
>Thats also why the lo variable continures to show a .f. in the locals window.
>
>HTH,
>
>
>>I lost something here.
>>Why is it out of scope? The locals window still shows that it exists, just the wrong type(). I assume that means that it's still in scope.
>>
>>>You have gone out of scope in the FOR...ENDFOR in the first example without making a memory variable reference to the lo object being evaluated.
>>>
>>>
>>>>I'm using VFP 7.0
>>>>
>>>>This doesn't work
>>>>
>>>>myForm.method()
>>>> LOCAL lo, lc
>>>> lc = WPARENT( THIS.NAME )
>>>> FOR EACH lo IN _VFP.FORMS
>>>> IF lo.NAME == lc
>>>> EXIT
>>>> ENDIF
>>>> ENDFOR
>>>> IF TYPE( 'lo.NAME' ) = 'C' ;
>>>> AND lo.WINDOWSTATE = 1
>>>> lo.WINDOWSTATE = 0
>>>> ENDIF
>>>>
>>>>but this does
>>>>
>>>>myForm.method()
>>>> LOCAL lo, lc, loParent
>>>> lc = WPARENT( THIS.NAME )
>>>> FOR EACH lo IN _VFP.FORMS
>>>> IF lo.NAME == lc
>>>> loParent = lo
>>>> EXIT
>>>> ENDIF
>>>> ENDFOR
>>>> IF TYPE( 'loParent.NAME' ) = 'C' ;
>>>> AND loParent.WINDOWSTATE = 1
>>>> loParent.WINDOWSTATE = 0
>>>> ENDIF
>>>>
Bill Morris