在 windows 窗体应用程序中使用可绘制对象
我们已经讨论了可绘制对象类,下面谈谈如何在 windows 窗体应用程序中使用这些类。首先谈一下 windows 窗体应用程序是怎样工作的。
windows 窗体应用程序的主要部分
简单的 windows 窗体应用程序包含一个主窗口(或窗体),其中包含控件子项。如果您是一位 visual basic 程序员,就会发现这个模型非常熟悉。
主窗口
任何 windows 窗体应用程序中的关键对象都是主窗口。该窗体将在应用程序的 static/shared main 方法中创建,如下所示。
在一个简单的 windows 窗体应用程序(例如我们所编写的)中,所有其他控件都是此主窗体的子项。
按钮和文本框
我们的窗体具有一套按钮和一些文本框。每个按钮有一个处理程序,可以向列表中添加形状,并绘制列表。所包含的文本框用于显示如何从窗体中获得输入。还有一个分组框,提供了有关文本框和相关按钮的可视指示。
picturebox
左边是最重要的控件:picturebox。这是绘制和显示图像的位置。在 windows 应用程序中,您可能需要随时重绘图像 -- 例如,如果窗口被最小化或被其他窗口覆盖,则再次显示窗口时便需要进行重绘。
在响应画图 (paint) 消息时便会完成这种按需绘图,由父窗体窗口类中的一个事件处理程序处理。
windows 窗体应用程序中的主要例程
我们简单看一下 windows 窗体应用程序中的重要例程。请注意,用户界面的代码与可绘制对象的代码相比非常简短。这就是使用 .net framework 完成诸多工作的好处。(这也表明我们使用可绘制对象类完成的工作确实很好。)
窗体方法
窗体(或主窗口)是从 system.windows.forms.form 中派生的,所以继承了其所有行为。所有这些控件都声明为这个类的成员,这样在清理类时它们也将被清理(清理是在 dispose 方法中实际明确完成的)。
它还包含了我们所需数据的声明(dshapelist 和一个随机数生成器对象)、main 以及用于按钮单击事件和 picturebox 画图事件的事件处理程序。
main
main 的任务就是创建和运行主窗口对象。其 c# 代码如下所示。
c#
[stathread]
static void main()
{
application.run(new mainwindow());
}
stathread 属性对于 windows 窗体应用程序的 main 非常重要 -- 您应当始终使用该项,以便依赖于 ole automation(例如拖放和剪贴板)的功能能够正常工作。
在 microsoft visual studio? 生成的 visual basic .net 源代码中不会找到此方法,但是如果使用 ildasm 在 .exe 中查找,便会找到一个与上面所述功能相同的 main -- 可能是由 visual basic .net 编译器生成的。
initializecomponent
在 windows form designer generated code(windows 窗体设计器生成的代码)下(如果不能看到此区域中的代码,单击小加号),会看到用于创建和初始化所有按钮和窗体上其他控件的代码。
数据声明/随机数生成
除了在代码的隐藏区域中声明的所有控件外,我们还需要声明两个变量:存放绘图列表的数据结构,以及一个 random 类型的对象。我们使用 random 对象为所创建的对象的位置生成随机数。
数据声明位于 mainwindow 类内,但位于任何方法之外。在 c# 和 visual basic .net 中,其代码如下所示:
c#
dshapelist drawinglist = new dshapelist();
random randomgen = new random();
visual basic
.net dim drawinglist as new dshapelist()
dim randomgen as new random()
我们还编写了一个 helper 方法以获得一个随机点:
c#
private point getrandompoint() {
return new point(randomgen.next(30, 320), randomgen.next(30, 320));
}
visual basic
.net private function getrandompoint() as point
return new point(randomgen.next(30, 320), randomgen.next(30, 320))
end function
它生成两个位于 30 和 320 之间的随机数,作为随机点的坐标。
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器