BOO大全/WinForm
虽然 Mono 的 Windows form 尚未完备(译注:现在已经差不多了),Windows form 仍然是个很适合用来建立使用者界面的架构。大部分的 Windows form 开发只要使用 Visual Studio 或 SharpDevelop 就可以搞定;使用这些工具会比较有效率,因为开发工具已经帮你完成很多代码。但是这并不是一个学习 framework 的好方法 - 在相信表单设计工具之前,你最好还是先了解东西是怎么放到一起的。
打造一个简单的视窗是很直觉的:
import System.Windows.Forms
form = Form(Text : "Hello!")
Application.Run(form)
的确,这个程式没有作任何有趣的事情,但是它却是一个最基本而且有最简架构的 Windows form 应用程序;建立一个视窗,然后传给 Application.Run。不要忘了,我们可以直接在呼叫建构子的时候指定属性的值,所以我们不另外写 form.Text="Hello" 。
我们也可以使用互动的Boo环境来操作 Windows form 类别。(你需要一个不是终端机的互动环境,例如 SharpDevelop 或 SciBoo)
>>> import System.Windows.Forms >>> import System.Drawing >>> f = Form(Text : "Sample") >>> btn = Button(Text : "Click me!") >>> f.Controls.Add(btn) >>> f.Show()
现在你有个带有按钮的视窗了。你也可以很容易的把动作系结到按钮的 Click 事件上。点击按钮,然后就能看到讯息:
>>> btn.Click += { print "I've been clicked!" } >>> I've been clicked!
使用匿名函式(或Closure)就是这么方便。注意,如果再次系结其他动作,之前的动作仍然会被呼叫:
>>> btn.Click += def(): ... print "again and again" ... >>> I've been clicked! again and again
另一个更有趣的控件是 PropertyGrid。设定 Dock属性,可以让控件填满整个视窗;设定SelectedObject属性为你想要侦看的物件。这会出现一个可以设定其属性的视窗:
>>> pg = PropertyGrid() >>> pg.SelectedObject = f >>> pg.Dock = DockStyle.Fill >>> f.Controls.Remove(btn) >>> f.Controls.Add(pg)
再举个例子,切换 ControlBox 属性可以让视窗标题右边的控制按钮消失。
>>> f.ControlBox=false
最后以一个可以列出环境变数值的视窗应用程序作为结束,首先会将所有环境变数都放到 ListBox 里面,当点选 ListBox 项目时,StatusBar 会显示出该环境变数的值。
import System
import System.Windows.Forms
import System.Drawing
form = Form(Text : "Environment Variables")
list = ListBox(Dock : DockStyle.Fill)
form.Controls.Add(list)
sb = StatusBar(Dock : DockStyle.Bottom)
form.Controls.Add(sb)
for name in Environment.GetEnvironmentVariables().Keys:
list.Items.Add(name)
list.SelectedIndexChanged += def():
sb.Text = Environment.GetEnvironmentVariable(list.SelectedItem)
Application.Run(form)