Generally,
Windows Forms controls are positioned absolutely
within their parent
control. Other frameworks use explicit layout strategies,
which can be very useful. For instance, the
AutoVarDialog
form uses
automatic control layout. CLRForm
defines a
useful StreamLayout
class,
which works rather like writing to a file; each new control is
placed after the last, until there's an explicit request for a 'new
line'.
This example
attaches a rough-and-ready toolbar to a form. A
Panel
control is a
useful tool in composing forms; by default it does not have a
border. It is easy to attach it to the top of the form with
DockStyle.Top
. The
StreamLayout
is used
to put the controls in a nice row:
-- layout1.wlua
require 'CLRForm'
panel = Panel()
layout = StreamLayout(panel)
b = Button()
b.Text = "One"
layout:Add(b)
b = Button()
b.Text = "Two"
layout:Add(b)
t = TextBox()
layout:Add(t)
layout:Finish()
form = Form()
form.Text = "Hello, World!"
panel.Dock = DockStyle.Top
form.Controls:Add(panel)
form:ShowDialog()