按钮单击事件处理程序
接下来就是每个按钮的按钮单击事件处理程序。多数仅仅是向绘图列表中添加一个
新的可绘制对象,然后调用 PictureBox 上的 Invalidate,从而使用更新的绘图列表进
行重绘。典型的按钮事件处理程序代码如下所示:
C#
private void AddPoint_Click(object sender, System.EventArgs e) {
drawingList.Add(new DPoint(GetRandomPoint(), Color.Blue));
Drawing.Invalidate();
}
Visual Basic
.NET Private Sub AddPoint_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles AddPoint.Click
drawingList.Add(New DPoint(GetRandomPoint(), Color.Blue))
Drawing.Invalidate()
End Sub
Change fills to hot pink(将填充色更改为粉红)按钮有一些不同 -- 它在列表
中获得一个所有可填充对象的数组,然后将它们的画笔颜色更改为粉红。这部分代码显
示在前面“返回可填充列表”一节的末尾。(此外还必须使 PictureBox 无效。)
最后,Erase All(全部删除)按钮简单地创建了一个新的绘图列表,并将我们的
drawingList 字段指向该列表。这样便释放了旧的绘图列表以进行最后的内存回收。然
后使 PictureBox 无效,把自己也删除掉。
PictureBox 画图事件处理程序
我们要注意的最后一项就是在 PictureBox 中画出图像。为此,需要处理
PictureBox 生成的 Paint 事件,然后使用通过此事件传递的 Graphics 对象在其上进
行绘图。要进行绘图,只需调用绘图列表的 DrawList 方法 -- 一个 for each 循环和
多态将负责处理剩下的工作!
C#
private void Drawing_Paint(object sender,
System.Windows.Forms.PaintEventArgs e) {
drawingList.DrawList(e.Graphics);
}
Visual Basic
.NET Private Sub Drawing_Paint(ByVal sender As Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) _
Handles Drawing.Paint
drawingList.DrawList(e.Graphics)
End Sub
我们的 Windows 窗体应用程序之旅到此结束 -- 请斟酌这些代码并进行修改,这样
可以学到更多内容!
在 ASP.NET 应用程序中使用可绘制对象
虽然 ASP.NET Web 应用程序和 Windows 窗体应用程序之间存在某些不同,但两者
的相似性还是令 Dr. GUI 感到惊奇!
Web 窗体应用程序的主要部分
ASP.NET Web 窗体应用程序的主要部分与 Windows 窗体应用程序的各部分非常对应
。
页面
此项对应 Windows 窗体应用程序中的主窗口。页面是所有按钮和其他控件的容器。
按钮
同样,这里有一组按钮,可用于在窗体上执行各种操作。请注意,与以前的应用程
序不同,我们将页面文档的 pageLayout 属性设置为 GridLayout 而不是 FlowLayout。
这意味着我们可以通过像素位置定位每个按钮(以及其他控件)。
请注意,这里也有一些文本框。
还要注意,您不能向 Web 复制和粘贴 Windows 窗体控件 -- 必须重新创建整个页
面。
图像控件
图像控件对应于 Windows 窗体应用程序中的 PictureBox。但两者有一些重要的差
别:图像控件不生成 Paint 消息,而是包含加载图像的 URL。
我们将这个 URL 设置为第二个 Web 页,ImageGen.aspx。换句话说,我们有一个
Web 页,它的全部工作就是从我们的绘图列表中生成图像中的位,然后将图像发送到客
户端的 Web 浏览器。
我们将在下面讨论其代码。
Web 窗体应用程序的主要例程
Windows 窗体应用程序和 Web 窗体应用程序的代码之间存在一些重要不同 -- 但也
有某些有趣的相似之处。还要注意,可绘制对象文件中的所有代码都可以用于三种应用
程序中的任何一种。
我们的页面是从 System.Web.UI.Page 派生的,除了以下内容外,还包含一组用于
所有控件的声明:
完全相同的内容:数据声明和 GetRandomPoint
此代码与 Visual Basic .NET Windows 窗体应用程序中的代码几乎完全相同。如果
愿意,可以再看一下上面的这段代码。它们之间只有一个不同之处,就是对字段进行了
声明而没有将其初始化。它们将在 Page_Load 方法中被初始化(如后面所示)。
GetRandomPoint 方法与其他应用程序完全相同。能够重复使用代码真的不错,不是
吗?
非常相似的内容:按钮单击事件处理程序
按钮单击事件处理程序与 Windows 窗体应用程序相同,只有一个例外:在 Web 窗
体中,由于每次单击按钮时都将重绘图像,因此无需(也不能)使图像控件无效。此外
,它还将自动进行重绘 -- 因此唯一要调用的就是绘图列表的 Add 方法。
以下是一个典型的按钮事件处理程序 -- 用于绘制一个点。
Private Sub AddPoint_Click(ByVal sender As System.Object, _ ByVal e As
System.EventArgs) Handles AddPoint.Click drawingList.Add(New
DPoint(GetRandomPoint(), Color.Blue)) End Sub
其他按钮事件处理程序都与 Windows 窗体的情况类似,当然,有一种例外情况除外
,即不调用任何一种方法使图像无效。
差别很大的内容:页面加载和卸载处理程序
页面加载和卸载处理程序方法是完全不同的。
请记住,我们的页面对象是使用每一个 HTTP 请求重新创建的。由于每个请求都将
创建一个新页面,因此我们不能象在 Windows 窗体中那样将数据作为成员变量存储,在
Windows 窗体中,主窗口将伴随应用程序而存在。
因此我们必须在某种状态变量中存储请求和页面之间所需的信息。这里有几种选择
-- 下面将就此进行讨论。
ASP.NET可交互式位图窗体设计7
最新推荐文章于 2018-08-05 16:47:56 发布