=====Creating child controls in a loop=====
//by Richard Russell, March 2013//\\ \\ In Liberty BASIC 4.04 you can use the **MAPHANDLE** statement to, for example, reuse the same code to open multiple windows. The LB4 documentation illustrates how to open three windows using this technique:\\
winName$ = "first second third"
for x = 1 to 3
call createWindow word$(winName$, x)
next x
wait
sub createWindow title$
texteditor #1.te, 10, 10, 200, 200
open "text "+title$ for window as #1
#1.te "this is the "+title$+" window"
#1 "trapclose aboutToClose"
handle$ = "#"+title$
maphandle #1, handle$
end sub
sub aboutToClose handle$
confirm "Close "+handle$+"?"; answer
if answer = 1 then close #handle$
end sub
It would be extremely useful to be able to use MAPHANDLE in a similar fashion to create multiple **child controls**, but for some reason LB4 will not let you do so. Fortunately this is one of the many limitations that is removed in **LB Booster**.\\ \\ The code below is adapted from the Alphabet Buttons example on the [[http://basic.wikispaces.com/Alphabet+Buttons|Liberty BASIC Community Wiki]] but instead of using a separate BUTTON statement for each button, all 26 are created in a loop:\\
Stylebits #win, 0,_WS_MAXIMIZEBOX,0,0
WindowWidth = 230
WindowHeight = 80
UpperLeftX=int((DisplayWidth-WindowWidth)/2)
UpperLeftY=int((DisplayHeight-WindowHeight)/2)
for i = 1 to 26
x = 15 * i : y = 5
if x > 195 then x = x - 195 : y = y + 15
Button #win.tmp, CHR$(64+i), sel, UL, x, y, 15, 15
maphandle #win.tmp, "#win." + chr$(64+i)
next
Open "Alphabet Buttons" For Window As #win
Print #win, "Trapclose quit"
wait
sub sel handle$
print "Selected "; handle$
end sub
sub quit handle$
close #handle$
end
end sub
If you click a button and watch the mainwin you can see that each button has a separate handle, exactly as was the case in the original program.