Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
What's wrong with this variable?
Message
General information
Forum:
Visual FoxPro
Category:
Troubleshooting
Miscellaneous
Thread ID:
00818431
Message ID:
00818482
Views:
22
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'                            && locals window shows lo = 'some text'
  lc = WPARENT( THIS.NAME )
  FOR EACH lo IN _VFP.FORMS
    IF UPPER( lo.NAME ) == UPPER( lc )
      loParent = lo
      EXIT                                    && locals window shows lo = object
    ENDIF
  ENDFOR
  IF TYPE( 'loParent.NAME' ) = 'C' ;          && locals window shows lo = .F. !!!!!!!!!!!!
      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                   && prints 'C' not .F.      and locals window shows lc = 'C'
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                             && Locals window shows lo as object here
>>>>    ENDIF
>>>>  ENDFOR
>>>>  IF TYPE( 'lo.NAME' ) = 'C' ;         && Locals window shows lo as .F. here
>>>>      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                             && Locals window shows lo as object here
>>>>    ENDIF
>>>>  ENDFOR
>>>>  IF TYPE( 'loParent.NAME' ) = 'C' ;   && Locals window shows lo as .F. here
>>>>      AND loParent.WINDOWSTATE = 1
>>>>    loParent.WINDOWSTATE = 0
>>>>  ENDIF
>>>>
Bill Morris
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform