配色: 字号:
《Visual Basic 2005 程序设计》第1章 vb2005程序设计概述
2023-05-25 | 阅:  转:  |  分享 
  
第1章 VB 2005程序设计概述本章主要内容:.NET基本介绍。熟悉Visual Studio 2005集成开发环境。构建简单的Windo
ws应用程序。使用MessageBox输出消息框。理解对象、属性、事件。使用Timer控件。熟悉Visual Studio 200
5代码编辑中的智能感知功能。使用Visual Basic 2005帮助系统。1.1 VB程序设计语言的发展Visual Basic
程序设计语言是在BASIC程序语言的基础上发展而来的。BASIC程序语言具有容易学习、且语法结构简单易理解、程序调试简单方便等特性
,因此,BASIC程序语言很快就成为被广泛使用的高级语言,深受初学程序设计者的喜爱与欢迎。20世纪80年代,结构化程序设计成为主流
的程序设计思想,一些新版本的BASIC程序设计语言在功能上对传统的BASIC语言进行了扩充,比如增加了数据类型和程序控制结构等,比
较典型的有True BASIC,Quick BASIC和Turbo BASIC等。1991年,微软推出了 Visual BASIC
(VB) 1.0版可视化程序设计开发环境,以结构化BASIC语言为基础,以事件驱动为运行机制,提供了图形化用户界面接口的代码,程序
设计人员无需编写此部分程序代码,简化了窗口化程序设计的过程。 VB 1.0刚开始推广时,并未获得市场的接受。在1993年VB 2.
0版问世后,人们才真正发现此程序设计语言的威力。当微软发行VB 3.0版之后,VB已成为市场中销售成长最快的程序设计语言,已有数百
万VB程序语言的使用者。VB的成功在于由公司或个人所开发的VB组件,可以重复使用,减少开发所需时间。VB 4.0版开始支持32位操
作系统。VB 5.0版提供ActiveX技术,可以用于网页设计,使得因特网应用程序的撰写发生了划时代的改变。VB 6.0版在数据存
取、建立组件与因特网的应用等方面都有新的突破,直到目前仍有许多组织使用此版本的VB。随着微软提出的.NET架构思想的应用,基于.N
ET开发基于Windows的应用程序成为主流,.NET提供多种程序设计语言,当然也包含VB,称为VB.NET,以便原本熟悉VB 6
.0的程序设计人员也能够顺利地在.NET架构上编写程序。但由于VB.NET和VB 6.0的兼容性不太好,并且和传统的VB设计方式也
不尽相同,因此并没有得到太多VB程序设计人员的认可。微软推出的Visual Basic 2005改变了一些VB.NET的不足,为程
序设计人员提供了更多的便利操作,增加了许多新的功能,如My命名空间,使以前一些复杂的操作变得更简单、更可靠,因此受到了程序设计人员
的大力欢迎。1.2 .NET概述 Microsoft .NET 扩展了通过任何设备随时随地操作数据和进行通讯的能力。.NET
使用分布式计算模型并基于开放标准(如 XML)将 PC 与其他智能设备连接在一起。.NET是Microsoft提出的一种新的软件
架构技术,.NET架构的结构图如图1-1所示。1.2.1 公共语言运行库公共语言运行库CLR(Common Language Ru
ntime)是.NET的核心,它可以提取.NET应用程序,并编译成本机能够执行的代码。同时CLR提供的应用程序隔离功能,使一个应用
程序的崩溃不会引起其它应用程序的崩溃。.NET为代码的安全提供了强有力的支持,为系统管理员、用户和软件开发人员提供了对应用程序功能
的精细控制。.NET提供了强大的异常处理能力,能够捕获各种异常,并以适当的方式响应处理异常。.NET提供一种垃圾回收机制,当应用程
序中的对象不再使用时,垃圾回收器GC(Garbage Collection)会自动从内存中删除对象。1.2.2 微软中间语言 相对
于传统应用程序,Visual Basic 2005源代码不直接编译成x86指令,而是编译成微软中间语言MSIL(Microsoft
Intermediate Language)。MSIL不依赖于任何处理器,是传统机器指令(如x86指令)的上面一层,因此MSIL
不能在任何处理器上直接运行。为了运行MSIL代码,需要实时编译器JIT(Just In Time)把MSIL代码进一步编译成机器指
令,如图1-2所示。只要完成MSIL到不同操作系统、不同芯片的编译,就可实现同一编程语言写的程序运行在不同操作系统或芯片上的目的。
1.2.3 命名空间 .NET构架由许多类组成。命名空间为这些类创建了层次结构,有助于避免名称冲突。如果两个类具有相同的名字,但如
果位于不同的命名空间,则认为是两个不同的类。命名空间实际上为类创建了作用域。.NET构架的命名空间使用点语法命名方案,该方案隐含了
层次结构的意思。此技术将相关类型分为不同的命名空间组,以便可以更容易地搜索和引用它们。全名的第一部分(最右边的点之前的内容)是命名
空间名,全名的最后一部分是类型名。例如,System.Collections.ArrayList 表示 ArrayList 类型,
该类型属于 System.Collections 命名空间。System.Collections 中的类型可用于操作对象集合。1.
2.4 .NET的目标 从跨平台的角度来看,.NET有点像Java。Java的目标是“一次编写,可以在任何平台运行”,但.NET
不同于Java,Java是“一种语言,多个平台”,而.NET是“多种语言,多种平台”。.NET的多种语言体现在:使用某种.NET语
言编写的应用程序,能够被其它.NET语言所理解,即实现编程语言的互操作。例如,使用Visual Basic 2005创建了一个类,
则C#语言可以使用这个类,或通过继承开展其功能。如果C#定义了一个字符串,能够顺利的传递到用Visual Basic 2005创建
的对象中,并使这个对象能够可靠的操作该字符串。目前.NET包含的互操作语言有Visual Basic 2005、C#和J#。这种编
程语言互操作的基础是通用类型系统CTS(Common Type System),通过CTS,Visual Basic 2005、C
#和其它的.NET语言都可以用同一种方式使用字符串和整数等,无需任何转换操作。.NET的目标是多种平台,但.NET目前主要针对的目
标是Windows平台。不过已经有一些开源项目试图创建基于其它平台的.NET,如Mono开源项目,其目标是通过其.NET平台,使任
何.NET应用程序可以运行于Linux,Solaris,Mac OS X,Windows和Unix系统。1.3 VB2005 Ex
press Edition介绍 本书将使用Visual Basic 2005 Express Edition 作为开发工具讲述Vi
sual Basic 2005。Visual Basic 2005 Express Edition 是Visual Studio
2005 Express Edition中的一员。Visual Studio 2005 Express Edition是Micro
soft 推出的轻量级、且易学易用的开发工具,适用于业余爱好者、初学者和学生开发人员。Visual Studio 2005 Exp
ress Edition包含的产品有:Visual Web Developer 2005 Express Edition:用于开发
动态网站,以及Web Services的轻量级开发工具。Visual Basic 2005 Express Edition、Vis
ual C# 2005 Express Edition、Visual C++ 2005 Express Edition、Visua
l J# 2005 Express Edition:用于开发Windows应用程序的轻量级开发工具。SQL Server 2005
Express Edition:用于创建数据库应用程序的轻量级的数据库管理系统。Visual Basic 2005 Expres
s Edition基于Visual Basic 2005语法,能够开发基于.NET的Windows应用程序、控制台应用程序、类库和
组件,并提供了集成开发、调试和编译环境,以及对数据库的访问和大量的基本Windows控件。1.4 Visual Studio 20
05 集成开发环境 Visual Studio 2005 是一个完整的集成开发环境IDE(Integrated Developme
nt Environment),用于创建应用程序的设计框架、编辑程序代码。Visual Studio 2005支持使用不同的编程语
言,其中Visual Basic 2005是其中的一种。使用Visual Basic 2005开发应用程序,首先要启动Visual
Studio 2005 IDE。1.4.1 启动Visual Studio 2005 单击“开始”|“所有程序”|“Micros
oft Visual Baisc2005 Express Edition”启动Visual Studio 2005,如果是第一次启
动,系统会花费一些时间配置Visual Basic 2005 IDE环境,如图1-3所示。Visual Basic 2005 ID
E启动后,首先看到“起始页”选项卡,起始页中各个窗口的名称及其简单描述如图1-4所示。1.4.2 创建新项目 通过“起始页”选项或
“文件”菜单创建新项目,出现如图1-6的对话框。⑴ 在模板中选择“Windows 应用程序”。⑵ 在“名称(N):”后面的文本框中
输入要创建的项目的名称“HelloWorld”。⑶ 单击“确定”创建项目。Visual Basic 2005 IDE将创建一个空的
Windows应用程序。目前,HelloWorld程序只包含一个空窗体,如图1-7所示。 HelloWorld程序窗体默认名称为F
orm1,对应的文件名是Form1.vb。在解决方案资源管理器中,单击“Form1.vb”打开窗口的设计视图;在“Form1.vb
”上单击鼠标右键,在弹出菜单中选择“查看代码”,选择“重命名”,则文件名“Form1.vb”处于修改状态,修改文件名为“Hello
World.vb”。也可以选择解决方案资源管理器中的“Form1.vb”,在属性窗口中修改文件名,如图1-8所示。单击工具栏中的“
启动调试”按钮,或单击菜单“调试”中的“启动调试”,或按F5键,执行HelloWorld程序,如图1-9所示。由于没有在窗体中添加
任何内容,用户无法和HelloWorld程序进行任何交互操作。而且程序窗口中的标题是“Form1”,不像一般的Windows应用程
序一样显示程序的名字或内容。为此,需要修改对象的属性。单击窗体右上角的“ ”退出程序。1.5 修改对象的属性 在Visual
Basic 2005中,窗体是对象,窗体中用于构建用户界面的列表框、按钮、文本框等也是对象,不同的对象类型不同,如窗体是Form
对象,列表框等是Control对象等。为了描述每一个具体的对象,需要对其属性值进行设置。当选中窗体设计视图中的对象(控件)时,属性
窗口中就会列出选中对象的属性。选择相应的属性名,在其右边可以设置属性的值。1.5.1 对象命名 程序中对每个对象的引用是通过对象的
名称进行的,为了准确的引用对象,以及根据对象的名称快速的知道对象的类型及其含义,在窗体设计时,创建任何新对象后,最好把对象的名称修
改为能够体现对象类型和含义的名字。单击窗体设计视图中的Form1窗体,则属性窗口显示Form1窗体的所有属性。找到Name属性,将
“Form1”改为“frmHelloWorld”。提示:在与其它程序开发人员合作时,采用一致的编码样式非常重要。在使用控件对象时,
最常用的是改进型匈牙利表示法,即在每个控件名称的前面加一个简写标识来表示控件的类型,这样在浏览代码时,很容易知道所使用控件的类型。
在Visual Basic 2005编程中,推荐使用标准的改进型匈牙利表示法。表1-1列出了常用控件及其前缀。表1-1 Visua
l Basic 2005中常用控件及其前缀 1.5.2 设置窗体的Text属性 图1-9显示的窗体的标题栏显示的是 “Form1”
,这是因为在创建窗体时,Visual Basic 2005自动将窗体的标题栏设置为窗体的名称。窗体标题栏的文本内容由窗体对象的Te
xt属性决定。修改frmHelloWorld的Text属性:⑴ 单击窗体,其属性显示在属性窗口中。⑵ 找到属性窗口中的Text属性
。⑶ 将“Form1”修改为“Hello World!”。重新运行HelloWorld程序,则窗体的标题栏显示为“Hello Wo
rld!”。1.5.3 设置其它属性 窗体的属性比较多,可以有选择的设置需要修改的属性项。对于HelloWorld程序,还可以修改
下面的属性项:⑴ 选择“StartPosition”属性,在下拉列表中选择“CenterScreen”,则运行HelloWorld
程序时,窗体显示在屏幕的中心位置。⑵ 选择“Icon”属性,单击“…”按钮查找图标文件,可以修改HelloWorld程序的图标。例
如:修改Form1的BackColor、Size等属性。1.5.4 保存项目 上述修改都保存在内存中,如果关闭计算机,则丢弃所有的
工作。因此要养成经常保存项目修改内容的习惯。单击工具栏中的“全部保存”按钮,或“文件”菜单中的“全部保存”,将出现如图1-10所示
的“保存项目”对话框。可以修改项目的名称、保存位置。如果选择“创建解决方案的目录”复选框,则Visual Basic 2005在指
定的“位置”目录创建一个子文件夹用于保存该项目。单击对话框中的“保存”按钮,保存项目中的所有内容。1.6 为窗体增加控件 为了增
加HelloWorld程序的功能,现增加两个Button控件。当鼠标移到“工具箱”选项卡上后,显示“工具箱”窗口,单击“公共控件”
旁边的“+”,显示最常用的控件,如图1-11所示。 ⑴ 单击Button控件,然后在窗体中单击鼠标左键,则在窗体中添加一个Butt
on控件。修改控件的Name属性为“btnSayHello”,Text属性为“Say Hello”。⑵ 用同样的方法创建第二个Bu
tton控件,修改控件的Name属性为“btnQuit”,Text属性为“退出”。如图1-12所示。运行HelloWorld程序,
则显示结果如图1-13所示。单击“Say Hello”按钮和“退出”按钮,发现程序没有任何反应,这是因为还没有添加与这两个控件相关
的控制代码。1.7 编写代码 为了使程序能够特定任务的执行操作和响应用户的交互信息,必须为程序编写相应的代码。1.7.1 编写第一
段代码 编写的第一段代码功能要求:当用户单击“Say Hello”按钮时,弹出MessageBox对话框显示“Hello Worl
d! 欢迎使用《Visual Basic 2005 程序设计》教程!”。由于代码要在用户单击“Say Hello”按钮时执行,因此
,应该把代码添加到对“Say Hello”按钮单击的事件处理部分,即响应“Say Hello”按钮的Click事件。在窗体设计视图
中双击窗体中的控件时,该控件的默认事件将显示在代码窗口中。Button控件最常见的操作是用户单击按钮,因此其默认事件是Click事
件。双击“Say Hello”按钮,进入代码窗口添加“Say Hello”按钮Click事件的响应代码,如图1-14所示。Priv
ate Sub 和End Sub之间输入的代码构成了“Say Hello”按钮Click事件处理程序,有时也称为事件过程。
Private Sub btnSayHello_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSayHello.Cli
ck ''在下面添加Say Hello 按钮的Click 事件的响应代码 ''显示消息框 M
essageBox.Show("Hello World!欢迎使用《Visual Basic 2005 程序设计》教程!", _"
Hello World 消息") End Sub提示:Visual Basic 2005 允许使用下划线符号“_”把代码行断开,
表示下一行是该行的续行,下划线前必须有空格,续行中代码前的空格都可忽略。Visual Basic 2005编译器把续行和该行看成一
行进行处理。通过MessageBox.Show方法显示一个简单的消息对话框,Show方法中的第一个参数是要显示的内容,第二个参数是
消息对话框标题栏中的标题。注意:在本书中,深色底纹的代码是需要输入的内容。说明:⑴ btnSayHello_Click是Click
事件处理程序的名字,sub说明btnSayHello_Click是一个过程,Private说明过程btnSayHello_Clic
k是私有的,只能在frmHelloWorld类内部使用。⑵ ByVal sender As System.Object和ByVal
e As System.EventArgs用于定义过程调用中的参数。⑶ Handles btnSayHello.Click说明是
btnSayHello按钮(btnSayHello是“Say Hello”按钮的对象名)的Click事件处理程序。⑷ 以撇号“''”
开始的语句表示是注释语句。⑸ MessageBox对话框用于显示用户定义的消息。运行HelloWorld程序,然后单击“Say H
ello”按钮,则弹出如图1-15所示的对话框,该对话框即为MessageBox对话框。单击“确定”,关闭“Hello World
消息”对话框。现在HelloWorld程序可以进行简单交互了。但退出程序时仍需单击窗体右上角的“ ”,单击“退出”按钮没有
任何反应。1.7.2 退出程序 当用户单击“退出”按钮时,结束程序的执行。因此,需要在“退出”按钮的Click事件处理程序中添加结
束程序执行的代码。在窗体设计视图中双击“退出”按钮,进入代码窗口添加“退出”按钮Click事件的响应代码。Private Sub
bntQuit_Click(ByVal sender As System.Object, _ ByVal e
As System.EventArgs) Handles bntQuit.Click ''关闭窗体并退出 Hello
World 程序 Me.Close()End Sub说明:Me.Close()关闭当前窗体。当程序中最后一个加载的窗
体被关闭后,应用程序将完全终止自身的运行。提示:Me.Close()中真正起作用的是Close(),而Me是关键字,在Visual
Basic 2005 中表示当前执行的代码所在类的实例,在HelloWorld程序中是当前窗体。当输入Me时,Visual Ba
sic 2005的智能感知IntelliSense可以快速列出当前对象的成员,进而实现快速输入Close()。运行HelloWor
ld程序,单击“退出”按钮,则过程bntQuit_Click响应“退出”按钮的Click事件,进而执行该过程中的代码Me.Clos
e(),关闭当前窗体并退出程序。1.8 对象 Visual Basic 2005属于面向对象程序设计语言,对象是构成程序的基础,如
窗体对象、控件对象等。对象是类的实例,类是对象的抽象描述。比如上面例子中frmHelloWorld对象是窗体类的一个实例,btnS
ayHello和btnQuit是Button类的对象实例,虽然这两个对象都属于Button类,但其Click事件具有不同的行为。再
比如“学生”是一个类,是一个抽象的概念,而通过“学生”类创建一个名为“李刚”的学生对象,则“李刚”是“学生”类的一个实例。当然,通
过“学生”类可以创建很多学生对象,但每个学生对象具有不同的属性,如姓名、学号等。同一个类创建的不同对象具有相同的属性名称,但可能具
有不同的属性值。1.9 对象属性与方法 所有的对象都通过其属性值,刻画其特征,如前面例子中,btnSayHello按钮的Text属
性的值为“Say Hello”,而btnQuit按钮的Text属性的值为“退出”。虽然这两个按钮都属于Button类,但通过其Te
xt属性,用户看到显示在屏幕上的是两个不一样的按钮。除通过属性窗口读取、修改属性的值外,在Visual Basic 2005中,更
多的是在程序设计过程中对对象的属性进行读取或修改。在程序代码中应用对象的属性时,首先要指定对象的名称,名称紧跟一个点号(.),然后
是属性名。其语句格式为:对象名.属性名例如,在前面的例子中,要求单击“Say Hello”按钮后,“Say Hello”按钮显示为
“Said Hello”,同时窗体的标题显示也改为“Said Hello World!”。则“Say Hello”按钮Click事
件响应代码改为:Private Sub btnSayHello_Click(ByVal sender As System.Obje
ct, _ ByVal e As System.EventArgs) Handles btnSayH
ello.Click ''在下面添加Say Hello 按钮的Click 事件的响应代码 ''显示消息框
MessageBox.Show("Hello World!欢迎使用《Visual Basic 2005 程序设计》教
程!", _ "Hello World 消息") ''修改btnSayHe
llo 按钮Text 属性的值 btnSayHello.Text = "Said Hello" ''修改
窗体的标题 Me.Text = "Said Hello World!" End Sub运行程序,窗体界面如图
1-16(a)所示,单击“Say Hello”按钮,关闭MessageBox消息对话框后,窗体如图1-16(b)所示。注意:有些属
性是只能读取,不能修改,称为只读属性。除了属性,大多数对象都有方法,方法是对象可以执行的行为。在Visual Basic 2005
中,对象的方法即为各种过程,方法被调用时,执行方法中的代码。调用方法的语句格式为:对象名.方法名([参数列表])有些方法被调用时
,不需要任何参数,如前面例子中的Me.Close();有些方法需要指定参数。例如:在前面的例子中,要求单击“Say Hello”按
钮后,“Say Hello”按钮和“退出”按钮大小改为宽200像素,高50像素,同时按左对齐显示。很多控件都有SetBounds方
法,可以改变控件的大小和位置。当然,按钮控件也有SetBounds方法。SetBounds方法的语句格式为:SetBounds (
x,y,width,height)其中x为控件的新 Left 属性值,即控件左边缘与其容器工作区左边缘之间的距离(以像素为单位);
y为控件的新 Top 属性值,即控件上边缘与其容器工作区上边缘之间的距离(以像素为单位);width为控件的新 Width 属性值
,即控件的宽度;height为控件的新 Height 属性值,即控件的高度。提示:在本书中,将穿插讲述一些控件的使用,对控件一些常
用的属性和方法进行简单讨论。更多控件的属性和方法的含义、使用规则,请查看Visual Basic 2005的帮助系统。Visual
Basic 2005帮助系统的使用在本章的后面进行介绍。增加对SetBounds方法的的调用,“Say Hello”按钮Clic
k事件响应代码改为: Private Sub btnSayHello_Click(ByVal sender As Syste
m.Object, _ ByVal e As System.EventArgs) Handles b
tnSayHello.Click ''在下面添加Say Hello 按钮的Click 事件的响应代码 ''
显示消息框 MessageBox.Show("Hello World!欢迎使用《Visual Basic 2005
程序设计》教程!", _ "Hello World 消息") ''修改b
tnSayHello 按钮Text 属性的值 btnSayHello.Text = "Said Hello"
''修改窗体的标题 Me.Text = "Said Hello World!" btnSayHe
llo.SetBounds(10, 10, 200, 50) ''重新设置btnSayHello 按钮的位置 btn
Quit.SetBounds(10, 80, 200, 50) ''重新设置btnQuit 按钮的位置 End Su
b1.10 事件基于过程的传统编程语言,比如C语言,程序本身完全指明了代码的执行顺序,可能在程序中有选择分支、循环和函数调用等,但
从整体来看,程序的整体执行过程由程序完全决定。如果程序需要和用户交互,只能按照程序执行顺序来决定,比如程序中要求输入学生的姓名、性
别、学号和家庭住址信息,如果程序设计时确定了这四项需要输入信息的次序,则用户必须按照相应的次序输入,不能打乱次序输入!很明显,程序
和用户的这种交互方式缺乏灵活性。 现在基于Windows的应用程序中,大家可能已经体会到了,应用程序和用户进行交互时,有时用户可以
选择任意的次序进行。这是因为这些Windows应用程序都是基于事件驱动的,只要用户输入了信息,就会触发一定的事件,而事件的发生又会
被应用程序捕获,进而执行相关代码。Visual Basic 2005 是集成了事件驱动的编程模型。1.10.1 触发事件 在前面的
例子中可以看出,事件的响应代码是一种特殊的方法,比如响应“Say Hello”按钮Click事件的方法为: Private
Sub btnSayHello_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSayHello.Click只不过这种方
法不是在其它方法中被调用,而是通过用户和窗体中的控件进行交互(单击按钮),触发Click事件后被调用执行。在Visual BASI
C 2005中,事件的类型有很多种,触发这些事件的方式也有很多种。下面主要介绍三类事件:用户与应用交互触发的事件。由其它对象触发的
事件。由操作系统触发的事件。1.10.2 用户与应用程序交互触发的事件 最常见的触发事件的方式是用户与应用程序进行交互。对于GUI
图形化用户界面,所有的窗体及窗体中的控件都是对象,这些对象对应的类都有一组相应的事件。比如前面例子中的Button控件,有Clic
k事件,用户单击指定的按钮(对象名为btnSayHello的按钮)时,触发其Click事件(如Handles btnSayHell
o.Click)。Button控件还有其它很多事件,如当鼠标进入Button对象的区域时,触发MouseEnter事件,当鼠标离开
Button对象的区域时,触发MouseLeave事件。在窗体设计视图中通过双击Button控件,可以打开其Click事件响应的代
码的程序框架,这是因为Click事件是Button控件的默认事件,如果要打开非默认事件响应代码的程序框架,则需要手工选择。下面演示
Button控件的MouseEnter事件和MouseLeave事件。⑴ 在前面例子的基础上,添加一个Label控件,通过属性窗口
改变其属性:Name为lblMouseEnterLeave,Text为空。当鼠标进入btnSayHello对象的区域时,lblMo
useEnterLeave的Text显示“鼠标进入Say Hello按钮区域”,当鼠标离开btnSayHello对象的区域时,lb
lMouseEnterLeave的Text显示“”,即不显示任何内容。⑵ 添加按钮btnSayHello的MouseEnter事件
的响应代码:在编辑器窗口上部的左面下拉列表中选择btnSayHello对象,如图1-18所示。在编辑器窗口上部的右面下拉列表中选择
MouseEnter事件,如图1-19所示,单击鼠标左键添加按钮btnSayHello的MouseEnter事件响应代码的框架,并
添加相应的代码: Private Sub btnSayHello_MouseEnter(ByVal sender As Objec
t, _ ByVal e As System.EventArgs) Handles btnSayHello.Mo
useEnter ''修改Label控件Text属性的值,提示鼠标进入Say Hello按钮的区域lblMouseEn
terLeave.Text = "鼠标进入Say Hello按钮区域" End Sub⑶ 用同样的方式添加按钮btn
SayHello的MouseLeave事件的响应代码: Private Sub btnSayHello_MouseLeave
(ByVal sender As Object, _ ByVal e As System.EventArgs)
Handles btnSayHello.MouseLeave ''修改Label控件Text属性的值,提示鼠标离开Sa
y Hello按钮的区域 lblMouseEnterLeave.Text = "" End Sub运行
程序,当鼠标移动到btnSayHello按钮区域内时,输出结果如图1-20(a)所示,但鼠标移动到btnSayHello按钮区域外
时,输出结果如图1-20(b)所示。1.10.3 由对象触发的事件 有些对象触发自己的事件,最典型的例子是Timer控件的Tick
事件。Timer控件每隔由Interval属性指定的时间间隔触发其Tick事件,触发事件后,Timer控件自动复位,然后在下个时间
再次触发其Tick事件。因此Timer控件用于完成一些定期需要重复执行的操作。下面通过在Helloworld窗体中实时显示系统当前
时间的例子演示Timer控件触发Tick事件的应用。⑴ 在前面例子的基础上,添加一个Label控件,通过属性窗口改变其属性:Nam
e为lblCurrentTime,Text为空。lblCurrentTime控件的Text实时显示当前时间。⑵ 添加Timer控件
,通过属性窗口改变其属性:Name为objTimer,Enabled为True,Interval为1000,双击objTimer,
添加其Tick事件的响应代码(Tick事件是Timer控件的默认事件): Private Sub objTimer_Tick(By
Val sender As Object, _ ByVal e As System.EventArgs) Handles objT
imer.Tick lblCurrentTime.Text = TimeOfDay() ''显示当前时间End Sub
运行程序,结果如图1-21所示,由于Timer控件的Tick事件每隔Interval属性指定的时间间隔(1秒)触发一次,则lblC
urrentTime的Text属性的值则每隔1秒刷新一次,从而实现在Helloworld窗体中实时显示当前系统时间。1.10.4
由操作系统触发的事件 如果一个程序的窗口遮盖了另一个程序的窗体,则上面的窗口移走后,下面的窗口必须重新绘制被挡住的部分。因此下面的
窗口必须知道上面的窗口移走了,即需要响应窗口重新绘制的事件。在窗口重新绘制时,将还触发窗体的Paint事件,这些事件都是Windo
ws操作系统触发的。下面演示窗体绘制时的Paint事件。⑴ 在前面例子的基础上,添加一个Label控件,通过属性窗口改变其属性:N
ame为lblPaintEvent,Text为空。lblPaintEvent控件的Text实时显示Paint事件触发时的时间和提示
信息。⑵ 在编辑窗口中添加窗体frmHelloWorld的Paint事件的响应代码: Private Sub frmHelloWo
rld_Paint(ByVal sender As Object, _ ByVal e As Sys
tem.Windows.Forms.PaintEventArgs) Handles Me.Paint ''提示Paint
事件发生lblPaintEvent.Text = "Paint 事件发生:" & TimeOfDay() End Sub运行程
序,如图1-22(a)所示,窗体被遮盖,当移走遮盖后,窗体需要重新绘制,则触发Paint事件,显示效果如图1-22(b)所示。1.
10.5 避免事件递归 在程序设计时,必须避免事件递归。事件递归是指某一事件被触发,执行指定的代码,而该代码的执行又触发该事件,如
果无休止的递归触发、执行,最后将导致StackOverflow异常,如果没有捕获StackOverflow异常的代码,则程序会出错
。如TextBox控件,当文本框中的内容发生改变时,触发TextChanged事件,如果在TextChanged事件的响应代码中又
再次修改TextBox控件文本框的内容,则又会触发TextChanged事件,这种情况即为事件递归。1.11 代码输入时的智能感知
智能感知IntelliSense是Visual Studio 2005代码编辑器中的重要功能之一,可以帮助程序开发人员更好地完成
代码的编写。1.11.1 列出成员 当在代码编辑器中输入对象名称并紧跟着输入“.”,则会弹出包含该对象所有成员的列表框。可以通过上
下方向键在列表框中选择对象的成员,也可继续输入对象的成员名称,列表框会根据输入的内容自动定位到成员名称对应的项上,同时还会弹出提示
框显示当前项的说明,如图1-23所示。当输入“Me.”后,代码编辑器会列出Me中包含的成员,同时光标位于上一次输入的成员的项上。当
再输入“Cl”后,列表框自动匹配并定位到Close上。按回车键或鼠标左键单击Close,Me.Close()就自动输入到编辑器中。
1.11.2 自动完成 规范的程序设计倡导规范的变量名命名规则,但如果变量名太长,对于程序开发者来说输入则非常麻烦,如输入一个x比
输入intCount要简单得多。在Visual Basic 2005中,可以通过自动完成功能帮助程序开发人员输入长而且容易出错的变
量名称。在代码编辑器中输入变量的前几个字母,然后按快捷键“Alt+→”,代码编辑器会根据前几个字母自动把后面的字母填充上,如果代码
中有多个变量的前几个字母与输入的字母相同,则代码编辑器会弹出一个列表框让程序开发人员选择需要的变量名。通过自动完成功能,也可以输入
当前对象的成员,如在前面的退出程序的代码中,输入“Cl”后按快捷键“Alt+→”,代码编辑器会自动匹配“Cl”开始的所有成员的名称
,并以列表框的形式显示出来,如图1-24所示。选择Close则完成自动输入。如果输入“Clo” 后按快捷键“Alt+→”,则直接出
现Close,这是因为在当前类(Class frmHelloWorld)中,以“Clo”开始的成员只有Close一个。1.11.3
参数提示 当输入对象的方法时,代码编辑器会自动显示这个方法的参数和参数类型,如果是重载函数,在提示中还可以查看到所有的重载函数。
如图1-25中所示。1.11.4 智能代码段 在程序开发过程中,经常会遇到一些经常反复使用的代码段,这些代码段可能大部分内容相似,
只有一些参数或部分内容不同。如果每次输入相同内容则比较麻烦。Visual Basic 2005提供的“智能代码段”功能,可以快速地
插入用户所需的代码段。在代码编辑窗口中单击鼠标右键,在弹出菜单中选择“插入代码段(I)…”,则弹出代码段选择列表,如图1-26所示
。如果要在光标处插入一个结构的定义,则选择“通用代码模式”,单击后在后续列表中选择“类型”,单击后在后续列表中选择“定义结构”,单
击后定义结构的代码段插入到光标处。如图1-27所示。在插入的代码中,底色是绿色的内容需要根据程序的具体需求进行修改,当鼠标在这些内容上时,代码编辑器会提示替换内容的类型和替换提示信息。1.11.5 自动错误纠正 对于一些代码错误,代码编辑器会根据上下文的含义进行自动错误纠正。如下代码: Dim dblVariable As Double = 1.7976931348623155E+48 Dim sngVariable As SinglesngVariable = dblVariable在启用严格类型检查功能时,如果把 Double 类型的值直接赋给 single 类型变量,则Visual Basic 2005在错误列表框中提示不允许从“Double”到“Single”隐式转换的错误信息,把光标移到出错的dblVariable上时,出现如图1-28所示的提示信息。单击提示信息中 的,或按快捷键Shift+Alt+ F10,启动错误纠正选项,如图1-29所示。单击用“Csng(dblVariable)”替换“dblVariable”,即可完成错误的自动纠正。1.12 注释和空白 代码的易读性是衡量程序优劣的标准之一,而通过在程序中添加注释语句,可以很好帮助程序设计者或其他人理解程序代码。因此养成为代码添加注释的习惯非常重要,尤其是在进行大型应用系统开发,或多人协同开发软件时。在Visual Basic 2005中,以撇号“''”开始的语句表示是注释语句。注释语句可以占用多行,也可添加到代码的后面。如: ''关闭窗体并退出 HelloWorld 程序 Me.Close() ’执行Close()过程要编写易读的代码,另一个重要的做法是留出大量的空白。由于编译器会忽略空白和注释语句,因此在代码中的大量空白和注释语句都不会影响程序代码的执行。1.13 使用帮助系统 通过Visual Basic 2005提供的帮助系统,可以快速搜索到相关信息。“帮助”菜单如图1-30所示。如单击“如何实现”、“搜索”、“目录”、“索引”等,打开Visual Basic 2005 Express 帮助文档,根据指引查找相关的帮助信息。另一种获得帮助的方式是在设计环境中,按F1键,Visual Basic 2005直接显示与正在编写代码相关的帮助主题,这种方式被称为上下文帮助。比如如果光标在“MessageBox.Show()”这些字母的任何位置,按F1键后,将在Visual Basic 2005 Express 帮助文档中列出MessageBox.Show()的所有重载函数及其说明,如图1-31所示。
献花(0)
+1
(本文系大高老师原创)