1、第二章 可视化编程的概念与步骤用第二章 可视化编程的概念与步骤教学目标 :本章主要介绍使用VB中一些简单却又极其重要的操作。学习本章时应注意以下几点:1、可视化编程的基本概念2、VB编程步骤3、控件的画法重点难点 :1、 可视化编程的基本概念2、VB编程的步骤教学方法 :演示教学法、实例教学法,讲解操作方法和操作步骤-让学生记笔记-留作业-学生动手操作,教师循徊指导-教师归纳总结教学手段:多媒体教学系统,机房现场教学,边演示,边讲解,边操作教学过程 :Visual Basic 概念为了理解应用程序开发过程,先要理解 Visual Basic 赖以创建的一些关键概念。因为 Visual Basi
2、c 是 Windows 开发语言,所以有必要与 Windows 环境保持一定的相似性。如果不熟悉 Windows 编程,就需要明白在 Windows 环境下编程和在其它环境下编程的一些根本性的差别。Windows 的工作方式:窗口、事件和消息全面地讨论 Windows 的内部工作机制将需要整整一本书的容量。没有必要深入了解所有的技术细节。Windows 的工作机制,简单地说就是三个关键的概念:窗口、事件和消息。不妨简单地将窗口看做带有边界的矩形区域。也许已经了解几种不同类型的窗口:如,Windows 95 的“资源管理器”窗口、文字处理程序中的文档窗口或者弹出提示有约会信息的对话框。除了这些最
3、普通的窗口外,实际上还有许多其它类型的窗口。命令按钮是一个窗口。图标、文本框、选项按钮和菜单条也都是窗口。Microsoft Windows 操作系统通过给每一个窗口指定一个唯一的标识号(窗口句柄或 hWnd)来管理所有的窗口。操作系统连续地监视每一个窗口的活动或事件的信号。事件可以通过诸如单击鼠标或按下按键的操作而产生,也可以通过程序的控制而产生,甚至可以由另一个窗口的操作而产生。每发生一次事件,将引发一条消息发送至操作系统。操作系统处理该消息并广播给其它窗口。然后,每一个窗口才能根据自身处理该条消息的指令而采取适当的操作(例如,当窗口解除了其它窗口的覆盖时,重显自身窗口)。可以想象,处理各
4、种窗口、事件和消息的所有可能的组合将有惊人的工作量。幸运的是,Visual Basic 使您摆脱了所有的低层消息处理。许多消息由 Visual Basic 自动处理了,其它的作为事件过程由编程者自行处理。这样可以快速创建强大的应用程序而毋需涉及不必要的细节。事件驱动模型在传统的或“过程化”的应用程序中,应用程序自身控制了执行哪一部分代码和按何种顺序执行代码。从第一行代码执行程序并按应用程序中预定的路径执行,必要时调用过程。在事件驱动的应用程序中,代码不是按照预定的路径执行而是在响应不同的事件时执行不同的代码片段。事件可以由用户操作触发、也可以由来自操作系统或其它应用程序的消息触发、甚至由应用程
5、序本身的消息触发。这些事件的顺序决定了代码执行的顺序,因此应用程序每次运行时所经过的代码的路径都是不同的。因为事件的顺序是无法预测的,所以在代码中必须对执行时的“各种状态”作一定的假设。当作出某些假设时(例如,假设在运行来处理某一输入字段的过程之前,该输入字段必须包含确定的值),应该组织好应用程序的结构,以确保该假设始终有效(例如,在输入字段中有值之前禁止使用启动该处理过程的命令按钮)。在执行中代码也可以触发事件。例如,在程序中改变文本框中的文本将引发文本框的 Change 事件。如果 Change 事件中包含有代码,则将导致该代码的执行。如果原来假设该事件仅能由用户的交互操作所触发,则可能会
6、产生意料之外的结果。正因为这一原因,所以在设计应用程序时理解事件驱动模型并牢记在心是非常重要的。交互式开发传统的应用程序开发过程可以分为三个明显的步骤:编码、编译和测试代码。但是 Visual Basic 与传统的语言不同,它使用交互式方法开发应用程序,使三个步骤之间不再有明显的界限。在大多数语言里,如果编写代码时发生了错误,则在开始编译应用程序时该错误就会被编译器捕获。此时必须查找并改正该错误,然后再次进行编译,对每一个发现的错误都要重复这样的过程。Visual Basic 在编程者输入代码时便进行解释,即时捕获并突出显示大多数语法或拼写错误。看起来就象一位专家在监视代码的输入。除即时捕获错
7、误以外,Visual Basic 也在输入代码时部分地编译该代码。当准备运行和测试应用程序时,只需极短时间即可完成编译。如果编译器发现了错误,则将错误突出显示于代码中。这时可以更正错误并继续编译,而不需从头开始。由于 Visual Basic 的交互特性,因此可以发现在开发应用程序时,您自己正频繁地运行着您的应用程序。通过这种方式,代码运行的效果可以在开发时进行测试,而不必等到编译完成以后。Visual Basic IDE使用对象在 Visual Basic中创建应用程序之际,也就是和对象打交道之时了。可以使用 Visual Basic 提供的对象 比如控件、窗体和数据访问对象。也可以在一个
8、Visual Basic 应用程序内部控制另一个应用程序对象。甚至还可建立自己的对象,定义它们的属性和方法。以下主题将详细讨论对象: 对象是什么 介绍对象的基本概念。 对象是代码和数据的组合,可以作为一个单位来处理。对象可以是应用程序的一部分,比如可以是控件或窗体。整个应用程序也是一个对象。下表列出了在 Visual Basic 中可能用到的几种类型的对象:示例 描述命令按钮 窗体上的控件,象命令按钮和框架,它们都是对象。窗体 Visual Basic 工程中的每一个窗体都是独立的对象。数据库 数据库是对象,并且还包含其他对象,如字段、索引等。图表 Microsoft Excel 中的图表是对
9、象。对象从何而来Visual Basic 中的每个对象都是用类定义的。用饼干模子和饼干之间的关系作比,就会明白对象和它的类之间的关系。饼干模子是类。它确定了每块饼干的特征,比如大小和形状。用类创建对象。对象就是饼干。下面再用两个例子进一步说明 Visual Basic 中类与对象之间的关系。 在 Visual Basic 的“工具箱”上,控件代表类。直到在窗体上画出这些被称作控件的对象为止,它们实际上并不存在。在创建控件之时也就是在复制控件类,或建立控件类的实例。这个类实例就是应用程序中引用的对象。 在设计时操作的窗体是类。在运行时,Visual Basic 建立窗体的类实例。 “属性”窗口显
10、示 Visual Basic 应用程序中的对象的类和 Name 属性。 把对象看作是类的原原本本的复制品,从而建立所有对象。一旦它们以单个对象的形式存在,属性就可改变。例如,如果在窗体上画了三个命令按钮,则每个命令按钮对象都是命令按钮类的实例。 每个对象都具有一组由类定义的公共的特征和功能(属性、方法和事件)。但是,每个对象都有自己的名字,都能分别设置成有效或无效,都能放在窗体的不同位置,等等。为简单起见,本章之外的大部分内容将不过多引用对象的类。例如,只要记住术语“ListBox 控件”意味着“列表框类的一个实例”。 用对象能做什么 讨论应用程序中使用对象的几种方法。 对象可提供现成代码,省
11、却书写麻烦。例如,可以自己创建打开文件和保存文件的对话框,但实际上大可不必。取而代之的是利用 Visual Basic 提供的 CommonDialog 控件(一个对象)。虽然用户也能撰写日程管理和资源管理的程序,但也大可不必。在此亦可使用 Microsoft Project 提供的 Calendar、Resources 和 Task 对象。Visual Basic 可以组合来自其它来源的对象Visual Basic 提供了把来自不同资源的对象组合起来的工具。现在可把 Visual Basic 的各种强有力的特性以及支持自动化(先前以 OLE 自动化闻名)的应用程序结合起来,建立定制的解决方法
12、。自动化是部件对象模式 (COM) 的一个特性,它是应用程序使用的工业标准,用来陈列对象以开发工具和其它应用程序。可把 Visual Basic 内部的控件结合在一起,也可使用其它应用程序提供的对象。考虑把下列对象放入 Visual Basic 窗体: Microsoft Excel Chart 对象 Microsoft Excel Worksheet 对象 Microsoft Word Document 对象 可用这些对象建立支票簿应用程序。由于不必书写代码,重建已由 Microsoft Excel 和 Word 等对象提供的功能,因而节省很多时间。 使用对象初步 介绍对象的属性和方法。 V
13、isual Basic 对象支持属性、方法和事件。在 Visual Basic 中,称对象的数据(设置和属性)为属性,称各种可在对象上操作的过程为方法。事件是可被对象识别的动作,例如单击鼠标和按下键盘键,还可编写代码来响应事件。 改变对象的属性就可改变对象的特性。用收音机打比方,收音机的一个属性是音量。用 Visual Basic 的行话来说,就是收音机有个“Volume”属性,改变其值就可调节音量大小。假定收音机的音量值可设置在 0 到 10 之间。 如果能够通过 Visual Basic 控制收音机,则可在一个过程中写代码,把“Volume”属性值从 3 提高到 5,使声音更响一些: Ra
14、dio.Volume = 5 除了属性以外,对象还有方法。方法和属性都是对象的一部分。一般说来,方法就是要执行的动作,而属性就是要设置或检索的特性。以拨号打电话为例。可以说电话有一个“拨号”方法,拨一个 7 位电话号码的语法就是: Phone.Dial 5551111 对象还有事件。当对象的某方面有变动时就触发了事件。例如,收音机可能有“VolumeChange”事件。电话可能有“Ring”事件,等等。 用属性控制对象 个别属性随着可以设置和取得它们的值的时间不同而不同。有的属性可在设计时设置。可在“属性”窗口设置这些属性的值而无需编写任何代码。而有的属性在设计时是不可用的;因此,这些属性只有
15、通过代码在运行时设置。 在运行时可以设置并可获得值的属性叫做读写属性。在运行时只能读取的属性叫做只读属性。 设置属性值 在想改变对象的外观或特性时设置属性的值。例如,通过改变 TextBox 控件的 Text 属性,就可以改变文本框的内容。 用下列语法设置属性值: object.property = expression 下面是设置属性的语句: Text1.Top = 200 设置 Top 属性为 200 缇。 Text1.Visible = True 显示文本框。 Text1.Text = hello 在文本框中显示 hello。 读取属性值 想要在代码执行附加动作(例如给另一个对象赋值)之
16、前得知对象的状态,这时就要读取属性值。例如,在运行代码之前能够返回 TextBox 控件的 Text 属性值,以确定文本框的内容,这里,代码可能改变值。 在大多数情况下可以用以下语法获得属性值: variable = object.property 属性值可以作为较复杂的表达式的一部分,而不必将属性赋予变量。下面的代码计算控件数组中的一个新成员的 Top 属性,它等于前一个成员的 Top 属性加上 400。 Private Sub cmdAdd_Click () 语句 optButton (n).Top = optButton (n-1).Top + 400 语句 End Sub 提示 如果不
17、只一次使用一个属性值,而且将这个值存储到一个变量中,则代码执行起来会更快。 用方法来执行动作 方法能够影响属性值。例如在用收音机打比方的例子中,SetVolume 方法改变了 Volume 属性。与此类似,在 Visual Basic 中列表框具有 List 属性,而 Clear 和 AddItem 方法可以改变这一属性。 在代码中使用方法 在代码中使用方法时如何书写语句,这取决于该方法要求多少参数,以及是否返回一个值。如果方法不要求参数,则用以下语法编写代码: object.method 下例中,用 Refresh 方法重画图片框: Picture1.Refresh 强迫重画控件。 有些方法
18、,如上面的 Refresh ,既无参数又不返回值。 如果方法要用多个参数,就用逗号将它们分开。例如, Circle 方法就要用代表窗体上圆的位置、半径和颜色的参数: 画一个半径为 1200 缇的蓝色园。 Form1.Circle (1600, 1800), 1200, vbBlue 如果要保存方法的返回值,就必须把参数用括号括起来。例如, GetData 方法从剪贴板返回一张图片: Picture = Clipboard.GetData (vbCFBitmap) 如果没有返回值,则参数不会出现在括号中。例如,AddItem 方法没有返回值。 List1.AddItem yourname 在列表
19、框中添加 yourname。 详细信息 关于 Visual Basic 对所有方法提供的语法和参数,请参阅语言参考。 对象之间的关系 讨论对象的层次、集合和容器。 对象之间的关系在同一窗体上放置两个命令按钮时,它们是两个具有不同 Name 属性设置值(Command1 和 Command2)的分开的对象,但都分享同一个类 命令按钮。它们也共享这样一个特征,即它们在同一窗体上。在本章前面已看到,窗体上的控件也包含在窗体中。这就把控件放在一个层次上。要引用控件就必须先引用窗体,就如同打电话拨号一样,首先要拨国家/地区号码或区域号码,然后再拨具体的电话号码。这两个命令按钮也共享这样一个特征,即它们都
20、是控件。所有控件都具有公共特性,使它们不同于窗体以及 Visual Basic 环境中的其它对象。以下章节中将说明 Visual Basic 如何用集合使相关的对象分组。对象的层次对象层次提供了一种组织结构,它决定了对象间的相互关系以及访问它们的方法。在大多数情况下不必考虑 Visual Basic 对象的层次。但是: 在操作其它应用程序的对象时,应当熟悉那个应用程序的对象层次。关于定位对象层次的信息,请参阅“用部件编程”。 在使用数据访问对象时,应当熟悉数据访问对象层次。就象在 Professional Features 一书上的数据访问对象指南部分描述的那样,该书包括在 Visual Ba
21、sic 的专业版和企业版中。 在 Visual Basic 中,一个对象包含其它对象的一般情况时有发生。 下面我们要详细讨论。使用对象集合集合对象有自己的属性和方法。对象集合中的对象作为集合的成员被引用。集合中的每个成员从 0 开始顺次编号;这就是成员的索引号。例如,控件集合包含已给定窗体上的所有控件 ,如图 5.10 所示。如果对集合中的所有对象都必须执行相同操作,则可用集合简化代码。图 5.10 控件集合 例如,下列代码遍历控件集合,并在列表框中列出每个成员的名字。Dim MyControl as ControlFor Each MyControl In Form1.Controls 把每
22、个控件的名字送到列表框。 List1.AddItem MyControl.NameNext MyControl应用集合成员的属性与方法有两种通用方法可用来对集合对象成员寻址: 指定成员的名称。以下两个表达式等价: Controls (List1) Controls!List1 利用成员的索引号: Controls (3)一旦能够从整体上对全体成员寻址,而且还能够个别地对单个成员寻址,就可用下面随便一种方式应用属性和方法:将 ListBox 控件的 Top 属性设置为 200。Controls!List1.Top = 200或者Dim MyControl as ControlFor Each M
23、yControl In Form1.Controls () 将每一个成员的 Top 属性设置为 200。 MyControl.Top = 200 Next MyControl包含其它对象的对象在 Visual Basic 中,一些对象包含其它对象。例如,窗体通常包含一个或数个控件。把一个对象当作其它对象的容器,这样做的好处在于,在代码中引用容器即可明了要使用哪个对象。例如,图 5.11 说明在一个应用程序中可有两个不同的窗体,一个用来输入应付帐交易,另一个用来输入应收帐交易。图 5.11 两个不同窗体可以包含同名的控件 两个窗口可以有名为 IstAcctNo 的列表框。通过引用包含列表框的窗体
24、就可准确指定要使用的列表框:frmReceivable.lstAcctNo.AddItem 1201或者frmPayable.lstAcctNo.AddItem 1201Visual Basic 中的公共集合在 Visual Basic 中一个对象包含其它对象的一般情况时有发生。下表简要叙述 Visual Basic 中最常用的集合。集合 描述Forms 包含载入的窗体。Controls 包含窗体上的控件。Printers 包含可用的打印机对象。在 Visual Basic 中也可实现对象控制。详细信息 关于对象容器的详细信息,请参阅“再论编程”中的“使用集合替代数组”。关于打印机集合的信息,
25、参阅“使用文本和图形”。关于窗体集合和控件集合的详细信息,请参阅语言参考。容器属性在窗体内,可用 Container 属性改变对象的容器。以下控件可包含其它控件: Frame 控件 PictureBox 控件 ToolBar 控件(仅对专业版和企业版而言) 如何在窗体上将命令按钮从一个容器移动到另一个容器,该例对此作了演示。打开新工程,并在窗体上画出 Frame 控件、PictureBox 控件和 CommandButton 控件。下列代码在窗体单击事件中,这些代码使计数器变量增加,并通过 Select Case 循环使命令按钮在容器之间移动。Private Sub Form_Click ()
26、 Static intX as Integer Select Case intX Case 0 Set Command1.Container = Picture1 Command1.Top= 0 Command1.Left= 0 Case 1 Set Command1.Container = Frame1 Command1.Top= 0 Command1.Left= 0 Case 2 Set Command1.Container = Form1 Command1.Top= 0 Command1.Left= 0 End Select intX = intX + 1End Sub详细信息 请参阅语
27、言参考中的“Container 属性”。对象之间的通讯除了在 Visual Basic 中使用和创建对象外,还可与其它应用程序通讯并在自己的应用程序中操作其它应用程序的对象。在应用程序之间共享数据的能力是 Microsoft Windows 操作系统的关键性能之一。有了 Visual Basic,与其它应用程序进行通讯变得极为灵活。详细信息 关于使用其它应用程序的对象及其通讯的详细信息,请参阅“用部件编程”。 创建对象 讨论在运行时如何创建和使用对象。 创建对象创建对象的最简单方法是在“工具箱”中双击控件。但是,对 Visual Basic 中的所有可用对象以及来自其它应用程序的所有可用对象,
28、要想充分体现它们的优势,可在运行时用 Visual Basic 的可编程性能创立对象。 用对象变量创建对象引用。 用类模块“从零开始”创建自己的对象。 用集合对象创建自己的集合。 详细信息 其它章节会介绍如何访问对象。例如,在“用部件编程”中将讨论 CreateObject 和 GetObject 函数。使用对象变量除了存储值以外,变量可引用对象。如同给变量赋值一样,基于下列相同理由,可把对象赋给变量: 变量名往往比变量所含的值(或者,在此情况下,所含值就是它们引用的对象)短而好记。 在运行代码时,为了引用其它对象,应改变变量。 引用包含对象的变量比反复引用对象本身有更高的效率。 使用对象变量
29、与使用常规变量一样,只不过多了把对象赋予变量这一步: 首先声明变量: Dim variable As class 然后把对象赋予变量: Set variable = object声明对象变量声明对象变量的方法和声明其它变量一样,要用 Dim、ReDim、Static、Private 和 Public。仅有的不同在于可选的 New 关键字和 Class 参数,本章后面将会对 New 关键字和 Class 参数都作介绍。语法是:Dim | ReDim | Static | Private | Public variable As New class例如,可以声明一个对象变量,它引用应用程序中的被称
30、做 frmMain 的窗体:Dim FormVar As New frmMain 声明一个类型为 frmMain 的对象变量。也可以声明一个对象变量,它引用应用程序中的任何窗体:Dim anyForm As Form 一般窗体变量。类似地,可以声明一个对象变量,它能够引用应用程序中的任何文本框:Dim anyText As TextBox 可以引用任何文本框 (但只能是一个文本框)。还可以声明一个对象变量,它能够引用任何类型的控件:Dim anyControl As Control 一般控件变量。注意,可以声明一个引用应用程序中的指定窗体的窗体变量,但不能声明引用特定控件的控件变量。可以声明能
31、够引用控件的特定类型(如 TextBox 或列表框)的控件变量,但不是引用那种类型的一个特定控件(如 txtEntry 或 List1)。但是,可把特定的控件赋予那种类型的变量。例如,对于具有列表框 lstSample 的窗体可以这样编码:Dim objDemo As ListBoxSet objDemo = lstSample赋值对象变量用 Set 语句将对象赋予对象变量:Set variable = object无论何时,只要希望对象变量引用对象,就可使用 Set 语句。有时可用对象变量,尤其可用控件变量直接缩短要键入的代码。例如,原来的代码是这样的:If frmAccountDisplay!txtAccountBalance.Text 0 Then frmAccountDisplay!txtAccountBalance.BackColor = 0 frmAccountDisplay
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1