VB06

xiaoxiao 13天前 7

VB基础06:对象编程 
在 Visual Basic中创建应用程序之际,也就是和对象打交道之时了。可以使用 Visual Basic 提供的对象— 比如控件、窗体和数据访问对象。也可以在一个 Visual Basic 应用程序内部控制另一个应用程序对象。甚至还可建立自己的对象,定义它们的属性和方法。 以下主题将详细讨论对象: 
    对象是什么 介绍对象的基本概念。 
    用对象能做什么 讨论应用程序中使用对象的几种方法。     使用对象初步 介绍对象的属性和方法。 
    对象之间的关系 讨论对象的层次、集合和容器。     创建对象 讨论在运行时如何创建和使用对象。 对象是什么 
    对象是代码和数据的组合,可以作为一个单位来处理。对象可以是应用程序的一部分,比如可以是控件或窗体。整个应用程序也是一个对象。下表列出了在 Visual Basic 中可能用到的几种类型的对象: 示例    描述 
命令按钮      窗体上的控件,象命令按钮和框架,它们都是对象。 窗体    Visual Basic 工程中的每一个窗体都是独立的对象。 数据库       数据库是对象,并且还包含其他对象,如字段、索引等。 图表    Microsoft Excel 中的图表是对象。      
对象从何而来 
    Visual Basic 中的每个对象都是用类定义的。用饼干模子和饼干之间的关系作比,就会明白对象和它的类之间的关系。饼干模子是类。它确定了每块饼干的特征,比如大小和形状。用类创建对象。对象就是饼干。 
    下面再用两个例子进一步说明 Visual Basic 中类与对象之间的关系。 
    在 Visual Basic 的“工具箱”上,控件代表类。直到在窗体上画出这些被称作控件的对象为止,它们实际上并不存在。在创建控件之时也就是在复制控件类,或建立控件类的实例。这个类实例就是应用程序中引用的对象。 
在设计时操作的窗体是类。在运行时,Visual Basic 建立窗体的类实例。      
“属性”窗口显示 Visual Basic 应用程序中的对象的类和 Name 属性。 
    把对象看作是类的原原本本的复制品,从而建立所有对象。一旦它们以单个对象的形式存在,属性就可改变。例如,如果在窗体上画了三个命令按钮,则每个命令按钮对象都是命令按钮类的实例。 每个对象都具有一组由类定义的公共的特征和功能(属性、方法和事件)。但是,每个对象都有自己的名字,都能分别设置成有效或无效,都能放在窗体的不同位置,等等。 
为简单起见,本章之外的大部分内容将不过多引用对象的类。例如,只要记住术语“ListBox 控件”意味着“列表框类的一个实例”。 用对象能做什么 
    对象可提供现成代码,省却书写麻烦。例如,可以自己创建打开文件和保存文件的对话框,但实际上大可不必。取而代之的是利用 Visual Basic 提供的 CommonDialog 控件(一个对象)。虽然用户也能撰写日程管理和资源管理的程序,但也大可不必。在此亦可使用 Microsoft Project 提供的 Calendar、Resources 和 Task 对象。 
    Visual Basic 可以组合来自其它来源的对象 
    Visual Basic 提供了把来自不同资源的对象组合起来的工具。现在可把 Visual Basic 的各种强有力的
特性以及支持自动化(先前以 OLE 自动化闻名)的应用程序结合起来,建立定制的解决方法。自动化是部件对象模式 (COM) 的一个特性,它是应用程序使用的工业标准,用来陈列对象以开发工具和其它应用程序。 
可把 Visual Basic 内部的控件结合在一起,也可使用其它应用程序提供的对象。考虑把下列对象放入 Visual Basic 窗体:     Microsoft Excel Chart 对象     Microsoft Excel Worksheet 对象     Microsoft Word document 对象 使用对象初步 
    Visual Basic 对象支持属性、方法和事件。在 Visual Basic 中,称对象的数据(设置和属性)为属性,称各种可在对象上操作的过程为方法。事件是可被对象识别的动作,例如单击鼠标和按下键盘键,还可编写代码来响应事件。 
    改变对象的属性就可改变对象的特性。用收音机打比方,收音机的一个属性是音量。用 Visual Basic 的行话来说,就是收音机有个“Volume”属性,改变其值就可调节音量大小。假定收音机的音量值可设置在 0 到 10 之间。 如果能够通过 Visual Basic 控制收音机,则可在一个过程中写代码,把“Volume”属性值从 3 提高到 5,使声音更响一些: Radio.Volume = 5      
    除了属性以外,对象还有方法。方法和属性都是对象的一部分。一般说来,方法就是要执行的动作,而属性就是要设置或检索的特性。以拨号打电话为例。可以说电话有一个“拨号”方法,拨一个 7 位电话号码的语法就是: 
Phone.Dial 5551111      
    对象还有事件。当对象的某方面有变动时就触发了事件。例如,收音机可能有“VolumeChange”事件。电话可能有“Ring”事件,等等。     用属性控制对象 
    个别属性随着可以设置和取得它们的值的时间不同而不同。有的属性可在设计时设置。可在“属性”窗口设置这些属性的值而无需编写任何代码。而有的属性在设计时是不可用的;因此,这些属性只有通过代码在运行时设置。 
    在运行时可以设置并可获得值的属性叫做读写属性。在运行时只能读取的属性叫做只读属性。 设置属性值 
    在想改变对象的外观或特性时设置属性的值。例如,通过改变 TextBox 控件的 Text 属性,就可以改变文本框的内容。 
    用下列语法设置属性值: object.property = expression      
    下面是设置属性的语句: 
Text1.Top = 200                      ' 设置 Top 属性为 200 缇。 Text1.Visible = True                  ' 显示文本框。 
Text1.Text = \hello\                  ' 在文本框中显示 \hello\。      读取属性值 
    想要在代码执行附加动作(例如给另一个对象赋值)之前得知对象的状态,这时就要读取属性值。例如,在运行代码之前能够返回 TextBox 控件的 Text 属性值,以确定文本框的内容,这里,代码可能改变值。 
在大多数情况下可以用以下语法获得属性值: variable = object.property      
    属性值可以作为较复杂的表达式的一部分,而不必将属性赋予变量。下面的代码计算控件数组中的一个新成员的 Top 属性,它等于前一个成员的 Top 属性加上 400。 Private Sub cmdAdd_Click ()     ' [语句] 
    optButton (n).Top = optButton (n-1).Top   400     ' [语句] End Sub      
提示 如果不只一次使用一个属性值,而且将这个值存储到一个变量中,则代码执行起来会更快。      
用方法来执行动作 
    方法能够影响属性值。例如在用收音机打比方的例子中,SetVolume 方法改变了 Volume 属性。与此类似,在 Visual Basic 中列表框具有 List 属性,而 Clear 和 AddItem 方法可以改变这一属性。 在代码中使用方法 
在代码中使用方法时如何书写语句,这取决于该方法要求多少参数,以及是否返回一个值。如果方法不要求参数,则用以下语法编写代码: object.method      
下例中,用 Refresh 方法重画图片框: Picture1.Refresh            ' 强迫重画控件。      
有些方法,如上面的 Refresh ,既无参数又不返回值。 
    如果方法要用多个参数,就用逗号将它们分开。例如, Circle 方法就要用代表窗体上圆的位置、半径和颜色的参数: 
' 画一个半径为 1200 缇的蓝色园。 
Form1.Circle (1600, 1800), 1200, vbBlue      
    如果要保存方法的返回值,就必须把参数用括号括起来。例如, GetData 方法从剪贴板返回一张图片: Picture = Clipboard.GetData (vbCFBitmap)      
如果没有返回值,则参数不会出现在括号中。例如,AddItem 方法没有返回值。 List1.AddItem \yourname\        ' 在列表框中添加 \yourname\。 对象之间的关系 
    在同一窗体上放置两个命令按钮时,它们是两个具有不同 Name 属性设置值(Command1 和 Command2)的分开的对象,但都分享同一个类— 命令按钮。 
    它们也共享这样一个特征,即它们在同一窗体上。在本章前面已看到,窗体上的控件也包含在窗体中。这就把控件放在一个层次上。要引用控件就必须先引用窗体,就如同打电话拨号一样,首先要拨国家号码或区域号码,然后再拨具体的电话号码。 
    这两个命令按钮也共享这样一个特征,即它们都是控件。所有控件都具有公共特性,使它们不同于窗体以及 Visual Basic 环境中的其它对象。以下章节中将说明 Visual Basic 如何用集合使相关的对象分组。 对象的层次 
    对象层次提供了一种组织结构,它决定了对象间的相互关系以及访问它们的方法。在大多数情况下不必考虑 Visual Basic 对象的层次。但是: 
    在操作其它应用程序的对象时,应当熟悉那个应用程序的对象层次。关于定位对象层次的信息,请参阅“用部件编程”。 
    在使用数据访问对象时,应当熟悉数据访问对象层次。 
    在 Visual Basic 中,一个对象包含其它对象的一般情况时有发生。 下面我们要详细讨论。 使用对象集合 
    集合对象有自己的属性和方法。对象集合中的对象作为集合的成员被引用。集合中的每个成员从 0 开始顺次编号;这就是成员的索引号。例如,控件集合包含已给定窗体上的所有控件 ,如图 5.10 所示。如果对集合中的所有对象都必须执行相同操作,则可用集合简化代码。      
例如,下列代码遍历控件集合,并在列表框中列出每个成员的名字。 For Each Control In Form1.Controls     '把每个控件的名字送到列表框。     List1.AddItem Control.Name Next Control 
应用集合成员的属性与方法 
有两种通用方法可用来对集合对象成员寻址:     指定成员的名称。以下两个表达式等价:     Controls (\List1\)     Controls!List1      
    利用成员的索引号:     Controls (3)      
    一旦能够从整体上对全体成员寻址,而且还能够个别地对单个成员寻址,就可用下面随便一种方式应用属性和方法: 
'将 ListBox 控件的 Top 属性设置为 200。 Controls!List1.Top = 200     -或者- 
For Each Control In Form1.Controls ()     '将每一个成员的 Top 属性设置为 200。     Control.Top = 200  Next Control 包含其它对象的对象 
    在 Visual Basic 中,一些对象包含其它对象。例如,窗体通常包含一个或数个控件。把一个对象当作其它对象的容器,这样做的好处在于,在代码中引用容器即可明了要使用哪个对象。例如,图 5.11 说明在一个应用程序中可有两个不同的窗体,一个用来输入应付帐交易,另一个用来输入应收帐交易。      
两个窗口可以有名为 IstAcctNo 的列表框。通过引用包含列表框的窗体就可准确指定要使用的列表框: frmReceivable.lstAcctNo.AddItem 1201     -或者- 
frmPayable.lstAcctNo.AddItem 1201 Visual Basic 中的公共集合 
在 Visual Basic 中一个对象包含其它对象的一般情况时有发生。下表简要叙述 Visual Basic 中最常用的集合。 集合    描述 
Forms    包含载入的窗体。 Controls    包含窗体上的控件。 Printers    包含可用的打印机对象。      
在 Visual Basic 中也可实现对象控制。 容器属性 
    在窗体内,可用 Container 属性改变对象的容器。以下控件可包含其它控件:     Frame 控件     PictureBox 控件 
    ToolBar 控件(仅对专业版和企业版而言)      
    如何在窗体上将命令按钮从一个容器移动到另一个容器,该例对此作了演示。打开新工程,并在窗体上画出 Frame 控件、PictureBox 控件和 CommandButton 控件。 
    下列代码在窗体单击事件中,这些代码使计数器变量增加,并通过 Select Case 循环使命令按钮在容器之间移动。 
Private Sub Form_Click ()     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   1 End Sub 对象之间的通讯 
    除了在 Visual Basic 中使用和创建对象外,还可与其它应用程序通讯并在自己的应用程序中操作其它应用程序的对象。在应用程序之间共享数据的能力是 Microsoft Windows 操作系统的关键性能之一。有了 Visual Basic,与其它应用程序进行通讯变得极为灵活。 创建对象 
    创建对象的最简单方法是在“工具箱”中双击控件。但是,对 Visual Basic 中的所有可用对象以及来自其它应用程序的所有可用对象,要想充分体现它们的优势,可在运行时用 Visual Basic 的可编程性能创立对象。 

1234>>78
    用对象变量创建对象引用。 
    用类模块“从零开始”创建自己的对象。     用集合对象创建自己的集合。      
使用对象变量 
    除了存储值以外,变量可引用对象。如同给变量赋值一样,基于下列相同理由,可把对象赋给变量:     变量名往往比变量所含的值(或者,在此情况下,所含值就是它们引用的对象)短而好记。     在运行代码时,为了引用其它对象,应改变变量。     引用包含对象的变量比反复引用对象本身有更高的效率。      
使用对象变量与使用常规变量一样,只不过多了把对象赋予变量这一步:     首先声明变量:     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      
例如,可以声明一个对象变量,它引用应用程序中的被称做 frmMain 的窗体: Dim FormVar As New frmMain    '声明一个类型为 frmMain                                      '的对象变量。      
也可以声明一个对象变量,它引用应用程序中的任何窗体: Dim anyForm As Form            '一般窗体变量。      
类似地,可以声明一个对象变量,它能够引用应用程序中的任何文本框: Dim anyText As TextBox        '可以引用任何文本框                                     '(但只能是一个文本框)。      
还可以声明一个对象变量,它能够引用任何类型的控件: Dim anyControl As Control     '一般控件变量。      
注意,可以声明一个引用应用程序中的指定窗体的窗体变量,但不能声明引用特定控件的控件变量。可以声明能够引用控件的特定类型(如 TextBox 或列表框)的控件变量,但不是引用那种类型的一个特定控件(如 txtEntry 或 List1)。但是,可把特定的控件赋予那种类型的变量。例如,对于具有列表框 lstSample 的窗体可以这样编码: Dim objDemo As ListBox Set objDemo = lstSample      
赋值对象变量 
    用 Set 语句将对象赋予对象变量: Set variable = object      
    无论何时,只要希望对象变量引用对象,就可使用 Set 语句。 
    有时可用对象变量,尤其可用控件变量直接缩短要键入的代码。例如,原来的代码是这样的: If frmAccountDisplay!txtAccountBalance.Text      . End Sub      
可用下面这个语句从其它模块调用 LateJobsCount 过程: Form1.LateJobsCount      
创建窗体的新属性就象在窗体模块中声明一个公用变量那样简单: Public IDNumber As Integer      
可用下面两个语句从其它模块设置和返回 Form1 的 IDNumber 值: Form1.IDNumber = 3 
Text1.Text = Form1.IDNumber      
也可用 Property 过程向窗体添加自定义属性。 
详细信息 “用对象编程”提供了 Property 过程的详细材料。      
注意 不必加载窗体就可调用窗体的变量或自定义方法,还可设置窗体的自定义属性。于是,不必将窗体加载到内存就可运行有关窗体的代码。同样,引用控件而不引用其属性或方法时也不会加载窗体。      
使用 New 关键字 
    用 New 关键字创建新对象,这个对象被视为它的类所定义的对象。可用 New 创建集合、窗体的实例以及类模块中定义的类。 在窗体上使用 New 关键字 
    在设计时创建的窗体是类。可用 New 关键字创建这个类的新实例。为了看到这一工作过程,请在窗体上画出一个命令按钮和其它几个控件。在“属性”窗口中将窗体的 Name 属性设置成 Sample。在命令按钮的 Click 事件过程中添加下列代码: Dim x As New Sample x.Show      
    运行应用程序,并单击命令按钮数次。把最前面的窗体移到一边。因为窗体是具有可视界面的类,所以可看到附加副本。每个窗体在相同位置上都有相同控件,而且这些位置也正是窗体在设计时的位置。 注意 要使窗体变量和已加载窗体的实例一直存在,请用 Static 或 Public 变量,而不要用局部变量。      
    也可将 New 关键字与 Set 语句并用。请试用命令按钮的 Click 事件过程中的代码: Dim f As Form1 Set f = New Form1 f.Caption = \hello\ 
f.Show 
将 New 关键字和 Set 语句并用会加快运行速度,因此,这种方法值得推荐。 对其它对象使用 New 关键字 
    可用 New 关键字从类模块中定义的类创建集合和对象。试用下例说明这一工作过程。 此例说明了 New 关键字是如何创建类的实例的。打开新工程,在 Form1 上画出一
个 CommandButton 控件。从“工程”菜单中选择“添加类模块”命令,从而在工程中添加一个类模块。设置类模块的 Name 属性为 ShowMe 。 
Form1 中的下列代码创建了类 ShowMe 的新实例,还调用了包含在类模块中的过程。 Public clsNew As ShowMe Private Sub Command1_Click ()     Set clsNew = New ShowMe     clsNew.ShowFrm End Sub      
类模块中的 ShowFrm 过程创建类 Form1 的新实例,显示窗体,然后使其最小化。 Sub ShowFrm () 
    Dim frmNew As Form1     Set frmNew = New Form1     frmNew.Show 
    frmNew.WindowState = 1 End Sub      
    为了应用这个例子,请运行应用程序并单击命令按钮数次。在创建 ShowMe 类的每一个新实例时将看到最小化的窗体图标出现在桌面上。 
详细信息 关于利用 New 创建对象的信息,请参阅“用部件编程”。      
New 关键字的限制 
下表说明不能用 New 关键字做什么。 不能用 New 创建    不允许的代码的例子 
基本数据类型的变量。    Dim X As New Integer 任何一般对象类型的变量。    Dim X As New Control 任何特定控件类型的变量。    Dim X As New ListBox 任何特定控件的变量。    Dim X As New lstNames      
释放对对象的引用 
每个对象都使用内存和系统资源。当不再使用对象时及时释放这些资源,这是良好的编程习惯。     用 Unload 从内存中卸载窗体或控件。 
    用 Nothing 释放对象变量占用的资源。用 Set 语句将 Nothing 赋予对象变量。      
给过程传递对象 
    可在 Visual Basic 中将对象传递给过程。在下面的代码例子中假定窗体中有一 CommandButton 控件: 
Private Sub Command1_Click () 
    '调用 Demo 子过程,并将窗体传递给它。 
    Demo Form1 End Sub 
Private Sub Demo (x As Form1)     '在屏幕中使窗体居中。 
    x.Left = (Screen.Width - x.Width) / 2 End Sub      
    可以通过引用把对象传递给参数,然后在过程内将参数设置成新对象。为了看到这一工作过程,打开工程并插入第二个窗体。在每个窗体中安放一个图片框。需要改变的属性设置值如下表所示: 
 
    Form1_Click 事件过程调用 Form2 中的 GetPicture 过程,并把一个空的图片框传递给它。 Private Sub Form_Click () Form2.GetPicture Picture1 End Sub      
    Form2 中的 GetPicture 过程把 Form2 上的图片框的 Picture 属性赋予 Form1 上的空图片框。 Private objX As PictureBox 
Public Sub GetPicture (x As PictureBox)     '将传递进来的图片框赋予对象变量。     Set objX = x 
    '将 Picture 属性值赋予 Form1 的图片框。     objX.Picture = picture2.Picture End Sub      
为了应用这个例子,请运行程序并单击 Form1。在 Form1 的图片框中将看到出现了 Form2 中的图标。 
    
VB基础05:过程与函数 
将程序分割成较小的逻辑部件就可以简化程序设计任务。称这些部件为过程,它们可以变成增强和扩展 Visual Basic 的构件。在 VISUAL BASIC 中有三种过程:子程序,函数和属性过程。  
    过程可用于压缩重复任务或共享任务,例如,压缩频繁的计算、文本与控件操作和数据库操作。  
用过程编程有两大好处:  
■      过程可使程序划分成离散的逻辑单元,每个单元都比无过程的整个程序容易调试。  
■      一个程序中的过程,往往不必修改或只需稍作改动,便可以成为另一个程序的构件。 
 
在 Visual Basic 中使用下列几种过程:  
■    Sub 过程不返回值。   
■    Function 过程返回值。 
 3  
VB基础03:基本词法 
    VB是在BASICA、GW_BASIC、QUICK  BASIC等语言基础上发展起来的,它保留了BASIC版本中数据类型和语法,对其中的某此语句和函数的功能作了修改或扩展,并根据语言的可视化要求增加了一些新的操作。   数据类型 
    一、基本数据类型     (1)字符串 
    字符串是一个字符序列,由ASCII字符组成。在VB中其长度为0到65535个字符。其中长度为0的字符称为空字符串。字符串通常放在引号中,如:     \HELLO\    \      (2)数值 
    VB的数值型数据分为整型数和浮点数两类。其中整型数又分为整数和长整数,浮点数分为单精度浮点数和双精度浮点数。     (3)货币 
    货币数据类型是为表示钱款而设置的,其取值范围为:     - 922337203685477.5808 到 922337203685477.5807     (4)变体 
    变体数据类型是一种可娈的数据类型,可以表示任何值,包括数值、字符串、日期/时间等。     下表列出了基本数据类型的名称、取值范围和存储要求: 类型名称 表示数据 取值范围 存储 Integer 整数 
-32768到32767 2字节 Long 长整数 
-2147483648到2147483647 4字节 String 字符串 
0到65535个字符 

12345>>78
1字节/字符 Single 单精度浮点数 
-3.402823E38到-1。401298E-45  1。401298E-45到3。402823E38 4字节 Double 双精度浮点数 
-1.79769313486232D308到-4.94065645841247D-324  4.94065645841247D-324到1.79769313486232D308 8字节 Currency 货币 
-922337203685477.5808到922337203685477.5807 8字节 Variant 变体 上述之一   
二、用户定义数据类型 
    用户可利用TYPE语句定义自己的数据类型,格式如下:     TYPE 数据类型名 
        数据类型元素名 AS 类型名         数据类型元素名 AS 类型名         ......         END TYPE 常量和变量 
    在程序中,不同类型的数据既可以常量的形式出现,又可以变量的形式出现。常量在程序执行期间其值不发生变化,而变量的值是可变的,它代表内存中指定的存储单元。    
变量的声明 : 
     Dim var AS Type          Public var AS Type             Private var AS Type     其中: 
        Public 定义公有变量         Dim,Private 定义私有变量    
Option Explicit 关键字 : 
    Visual Basic中用户可以不声明而直接使用变量,但容易产生错误。可以使用Option Explicit强制声明变量,必须先声明后引用。 
    Option Explicit关键字放在窗体或模块的通用声明(Genneral Declaractions)处。 
    也可以通过设置将Option Explicit自动加入到每个模块中,方法是:     1、从?工具?菜单中选?选项?     2、选择?编辑?选项卡     3、选择“要求变量声明”选项     4、选择“确定”    
变量的作用域 
    VB的变量有三个作用域: 
    局部(LOCAL)在过程级定义的变量,仅在声明它的过程中可见。 
    模块/窗体(MOUDULE/FORM)在模块或窗体级声明的变量,在声明它的模块或窗体中的所有过程中可见。 
    公有(PUBLIC)在模块或窗体级声明的变量,在所有项目的任何过程中都可。    
STATIC 关键字 
    普通的局部变量在过程结束后释放,在下次执行过程时重新初始化为0。用STATIC声明的局部变量在过程结束后不被释放,仍保留变量的值。     例:Sub P() 
                       Static a As Integer                        a = a    1                        Msgbox \A=\ 
最新回复 (0)
返回
免责申明:本站点所有资源来自互联网网友发布,如侵犯您的合法权益,请联系zzjfuture@gmail.com,我们立刻处理。 @2010-2020 技术支持: 软件开发