跳转到内容

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)

上一章:例外处理 目录