by Otto » Tue Nov 03, 2020 9:28 am
Hello Marc,
detached locals
Here is an explanation from MR. RAO.
Thank you, Mr. Rao, for always helping us.
Best regards,
Otto
____________________________________________________________________________
Creating controls in a loop from array is very tricky. It does not work as expected.
Let me show why:
Wrong code:
for n := 1 to 20
@ n * 20, 50 GET aVar[ n ] OF oWnd <clauses>
next n
After this loop the present value of " n " is 21.
When the dialog is activated and controls are to be shown, the value of "n" is 21 and naturally we get runtime error as subscript out of range.
Correct way:
for n := 1 to 20
aGet[ 1 ] := MakeGet( n * 20, 50, aVar, n, oWnd )
next n
ACTIVATE WINDOW ....
//--------------
static function MakeGet( nRow, nCol, aVar, n, oWnd )
local oget
@ nRow, nCol GET oGet VAR aVar[ n ] of oWnd <clauses>
// note this value of "n" remains the same till oGet goes out of scope
// the principle is called "detached locals"
return oGet
********************************************************************
mod harbour - Vamos a la conquista de la Web
modharbour.org
https://www.facebook.com/groups/modharbour.club********************************************************************