410 likes | 533 Views
第 11 章 面向对象的编程. 11.1 类的创建与应用. 11.2 系统对象. 11.3 文件系统对象模型. 退出. 11.1 类的创建与应用. 11.1.1 类模块的基本概念. 11.1.2 类的创建过程. 11.1.3 对类的访问. 返回. 退出. 11.1.1 类模块的基本概念. 在面向对象的程序设计中,类是进行数据封装和数据隐藏的工具。 类是对象的归纳和抽象。 类与过程既有共同之处,也有着本质的区别。 在 VB6.0 中,类是 — 种通用代码,通过类模块建立。它是关于某个对象的外观(即属性)和性能(即方法)的描述。
E N D
第11章 面向对象的编程 11.1 类的创建与应用 11.2 系统对象 11.3 文件系统对象模型 退出
11.1 类的创建与应用 11.1.1类模块的基本概念 11.1.2 类的创建过程 11.1.3 对类的访问 返回 退出
11.1.1类模块的基本概念 在面向对象的程序设计中,类是进行数据封装和数据隐藏的工具。 类是对象的归纳和抽象。 类与过程既有共同之处,也有着本质的区别。 在VB6.0中,类是—种通用代码,通过类模块建立。它是关于某个对象的外观(即属性)和性能(即方法)的描述。 类模块与窗体十分类似,只是在运行期间类模块总是不可见的,而窗体是可见的,可以说类模块是一种没有可视界面的控件。每个类模块定义一个类,类模块中的Sub和Function函数过程是类的方法,类模块中的模块层变量和属性过程是类的属性。 用类模块定义类的主要任务就是建立在运行期间由对象使用的属性和方法。面向对象程序设计的主要概念之一,就是把与特定对象有关的所有数据和过程集合在一起,这就是把所有对象的属性和方法定义在一个类模块中的原因。
11.1.2 类的创建过程 创建类的基本步骤为: (1)插入一个类模块 (2)定义类的属性 (3)添加类的方法 (4)响应缺省事件和创建自定义事件
例11-1:某单位根据销售人员的销售额决定奖金额。在数据文件“c:\nemployee.dat”中存放着雇员编号、姓名、销售额和奖金。创建一个应用程序,当单击窗体上的“销售情况查询”按钮时,要求用户在InputBox框中输入姓名和密码来查询有关资料。参见图11-1。例11-1:某单位根据销售人员的销售额决定奖金额。在数据文件“c:\nemployee.dat”中存放着雇员编号、姓名、销售额和奖金。创建一个应用程序,当单击窗体上的“销售情况查询”按钮时,要求用户在InputBox框中输入姓名和密码来查询有关资料。参见图11-1。 下面结合这一实例,介绍类的创建过程和使用方法。 图11-1运行界面 图11-2 类的创建 1.插入一个类模块 新建一个工程,单击“工程 | 添加类模块”命令,在“添加类模块”对话框中的“新建”标签中选择“类模块”,插入类模块,可以在“工程资源管理器”中看到其图标,新类的缺省“名称”属性为Class1,这里将其改为bonusClass,且保存到磁盘上时默认名为bonusClass.Cls。
2.定义类的属性 (1)使用公共变量 使用公共变量定义类的属性应在类模块的声明部分进行,其格式为: Public 属性名 As 类型 (2)使用属性过程 使用属性过程定义属性的步骤: (1)单击“工程 | 添加过程”命令,打开 “添加过程”对话框。 (2)在名称栏类输入过程的名称employee,该名称将成为创建对象后的属性名。 (3)选中“属性”单选按钮后,单击“确定”按钮,在代码窗口将显示该属性过程的框架,参见图11-3。 图11-3 “添加过程”对话框 图11-4 类模块中属性过程框架
下面就是采用属性过程在该程序的类模块bonusClass中定义lemployee属性和lpassword属性:下面就是采用属性过程在该程序的类模块bonusClass中定义lemployee属性和lpassword属性: Private memployee() As String Private mpassword() As String Public Property Get lemployee() As String() lemployee = memployee End Property Public Property Let lemployee(arr() As String) memployee = arr End Property Public Property Get password() As Variant lpassword = mpassword End Property 从上面的代码可知,lemployee属性是可读写的,lpassword属性是只读的。这里,在类模块bonusClass的声明部分,将memployee和mpassword声明为字符数组变量(当然可以使用一般变量,如本例中如果不同的用户使用同一个密码,就可以将声明部分lpassword()后的()去掉),用于在属性过程之间传递数据,而对类模块之外的应用程序而言是不可见的,因而类模块中的数据具有隐蔽性。 Lemployee属性是可读写的,因而可以在类模块外部改变其属性值,而在类模块之外对lpassword属性的改变是无效的。
3.添加类的方法 窗体和图片框具有Print方法,列表框和组合框具有AddItem方法。同样,由类创建的对象也可以具有方法。为类添加的方法就是在类模块中添加公共过程。使用Public Sub子过程创建的方法没有返回值,而采用 Public Function函数过程创建的方法可以有返回值。也可以在类模块中创建私有过程,但是只能在类模块内部调用,在外部是不可见的。 下面在bonusClass类模块中创建displayemployee方法,该方法用于显示雇员的编号、姓名、销售额和奖金数据。 Public Function displayemployee() As String Dim mdisplay As String RaiseEvent Salenum ' 激发Salenum事件 mdisplay = "雇员号:" & memployee(1) & vbCrLf mdisplay = mdisplay & "姓名:" & memployee(2) & vbCrLf mdisplay = mdisplay & "销售额:" & memployee(3) & vbCrLf mdisplay = mdisplay & "奖金:" & memployee(4) & vbCrLf If memployee(1) <> "" Then displayemployee = mdisplay Else MsgBox "没有您的数据或密码错误!" End If End Function
4.类模块的缺省事件和自定义事件 系统自身为创建类提供的事件为类的缺省事件,这类事件有两种,即Initialize事件和Terminate事件。此外,用户也可以在类模块中自定义事件。 (1) 缺省事件 在类模块代码窗口的“对象”框中选择“Class”,将自动创建Initialize事件过程的框架,此时在“过程”框中选择“Terminate”,将创建Terminate事件过程的框架。 在本例中,可以为用户密码进行初始化设置以及初始化用户数据,其代码为: Private Sub Class_Initialize() ReDim mpassword(1 To 4) ReDim memployee(1 To 4) mpassword(1) = "111111" : mpassword(2) = "222222" mpassword(3) = "333333" : mpassword(4) = "444444" memployee(1) = "" : memployee(2) = "" memployee(3) = 0 : memployee(4) = 0 End Sub 一旦由创建类一个对象,程序将首先执行Initialize事件过程,为密码属性附值。
11.1.3 对类的访问 只有在程序中创建了类对象后,才能为类对象设置属性值,调用其方法和响应事件过程(即为类对象编写事件过程代码),这就是对类的访问。具体步骤包括声明类对象变量、创建类对象,使用类对象的属性、方法和响应事件过程,如有必要,还应释放对类对象的引用。 由于类没有可视化的界面,因此访问类时,一般要借助窗体或窗体上的控件。 1.声明对象变量 在创建类的对象时,应如同前面章节介绍的创建窗体类对象变量一样,应在创建前声明对象变量,其格式为: Dim 对象变量名 As 类名 本例的对象声明为: Private [WithEvents] mybonus As bonusClass
2.创建对象 仅仅声明了一个对象变量后,并没有为对象变量指明具体的对象,因此对象变量的值为“Noting”。如执行 Print TypeName(mybonus) 语句,将在窗体上显示Noting。 可以使用Set语句创建具体的对象,其格式为: Set 对象变量=New 类名 Set mybonus=New bonusClass 一旦在内存中为对象指明了存储单元后,就可以使用多个对象变量指向同一个对象。如在上述创建对象的基础上,还声明了另一个对象变量: Private [WithEvents] youbonus As bonusClass 则下面的Set语句 Set youbonus= bonusClass 将对象变量youbonus指向上次创建的同一个bonusClass对象。 除了采用先声明对象,然后使用Set语句创建对象的方法来创建对象外,还可以直接在声明对象时“隐式”地创建对象,其格式为: Dim 对象变量名 As New类名
3.使用对象 创建了类对象后,就可以像使用标准控件一样使用类对象,只不过类对象是不可见的。 在本例中,响应自定义事件Salenum的代码为: Private Sub mybonus_Salenum() ' 响应Salenum事件过程 ReDim carr(1 To 4) As String Dim newname As String, newpassword As String * 6 newname$ = InputBox("请输入你的姓名") newpassword$ = InputBox("请输入你的密码") Open "c:\employee.txt" For Random As #1 Len = Len(nemployee) s = LOF(1) / Len(nemployee) For i = 1 To s Get #1, i, nemployee carr(1) = nemployee.enumber : carr(2) = nemployee.ename carr(3) = nemployee.esallnumber : carr(4) = nemployee.ebonus If Trim(nemployee.ename) = newname And newpassword = mybonus.lpassword(i) Then mybonus.lemployee = carr ' 为属性赋值 Exit For Else Erase mybonus.lemployee End If Next Close #1 End Sub
' 在标准模块中建立自定义变量: Type mdemployee enumber As String * 10 epassword As String * 6 ename As String * 20 esallnumber As Long ebonus As Currency End Type Dim nemployee As mdemployee ' 在窗体声明部分声明窗体级变量 Private WithEvents mybonus As bonusClass ' 在窗体声明部分声明类对象变量 ' 窗体加载事件代码: Private Sub Form_Load() Set mybonus = New bonusClass ' 创建类对象 End Sub ' 命令按钮单击事件代码: Private Sub Command1_Click() Print mybonus.displayemployee ' 调用类的方法 End Sub
4.释放对象 如果在程序中不再需要某个类对象变量,可以使用语句 Set 类对象名=Nothing 来释放对象变量所占的内存空间。 为进一步地理解类模块中各属性、方法和事件的内部运行机制及其相互关系,可以按F8键,使用逐语句执行的方式运行应用程序。也可以按F4键,打开对象浏览器窗口来查看类的各个成员。如图11-5为本例中的bonusclass类的成员,包括属性lemployee、lpassword,方法displayemployee,缺省事件Class_Initialize,自定义事件Salenum和类内部使用的私有变量memployee、lpassword等。 图11-5 对象浏览器窗口
11.2 系统对象 11.2.1 App对象 11.2.2 Clipboard对象 11.2.3 Screen对象 11.2.4 Printer 对象和 Printers 集合 11.2.5 其他系统对象 返回 退出
11.2.1 App对象 App 对象是通过关键字 App 访问的全局对象。它提供了十多个属性,包括应用程序的标题、版本信息、可执行文件和帮助文件的路径及名称以及是否运行前一个应用程序的示例。 表11-1 App对象的主要属性
11.2.2 Clipboard对象 Clipboard 对象用于操作剪贴板上的文本和图形。它使用户能够复制、剪切和粘贴应用程序中的文本和图形。 表11-2 Clipboard对象的常用方法
例11-2:利用Clipboard对象将图片框Picture1中的图片粘贴到图片框Picture2中,将Clipboard对象中的文本粘贴到文本框Text1中。Private Sub Picture2_Click() Clipboard.Clear Clipboard.SetData Picture1.Picture Picture2 = LoadPicture("") Picture2 = Clipboard.GetData() End Sub Private Sub Text1_Click() Text1 = Clipboard.GetText() End Sub 图11-6 Clipboard对象应用实例
11.2.3 Screen对象 Screen 对象是指整个 Windows 桌面。Screen 对象,可以访问当前窗体、控件以及其他与屏幕有关的信息,如修改屏幕鼠标指针。表11-3为Screen对象的常见属性。 表11-3 Screen对象的常见属性
例11-3:在窗体上依次添加两个图片框Picture1和Picture2和一个时钟Timer1控件(将其Interval属性设置为1000),编写如下代码:例11-3:在窗体上依次添加两个图片框Picture1和Picture2和一个时钟Timer1控件(将其Interval属性设置为1000),编写如下代码: Private Sub Timer1_Timer() Static screenfontscount As Integer If screenfontscount < Screen.FontCount Then Screen.ActiveControl.Cls Screen.ActiveControl.Print Screen.Fonts(screenfontscount) If Trim(Screen.Fonts(screenfontscount)) = "Arial" Then Timer1.Enabled = False MsgBox "这就是我想要的字体" Exit Sub End If screenfontscount = screenfontscount + 1 End If End Sub
11.2.4 Printer 对象和 Printers 集合 使用 Printer 对象可以实现与系统打印机的通讯(最初是缺省系统打印机)。使用Printers 集合可获取有关系统上所有可用打印机的信息,Count属性表示Printers 集合中的元素个数。 Printer 对象的常用属性有Height、Width、PaperSize、DeviceName、FontName和FontSize等,分别代表打印纸的长度、宽度、纸张大小、打印机的名称、打印字体名称和字体尺寸。 Printer 对象重要的方法有:EndDoc方法(开始打印)、KillDoc方法(中断打印)和NewPage方法(换页)。
例11-4:将“关于软件设计大赛的通知”文本打印10份,并在页前面加上页码。例11-4:将“关于软件设计大赛的通知”文本打印10份,并在页前面加上页码。 Private Sub Command1_Click() Dim npage As Integer, str As String Printer.FontName = "宋体": Printer.FontSize = 20 For npage = 1 To 10 str = "第" & Printer.Page & "页" & vbCrLf & "关于软件设计大赛的通知" ' 打印内容 Print str Printer.Print str Printer.NewPage ' 换页 Next Printer.EndDoc ' 将打印内容送到打印缓冲区,如果设备就绪,则开始打印 End Sub 例11-5:在系统所有的打印机中查找第一个将页码方向设置为纵向的打印机,然后将其设置为缺省打印机。 Dim X As Printer For Each X In Printers If X.Orientation = vbPRORPortrait Then Set Printer = X '设定为系统缺省打印机。 Exit For End If Next
11.2.5 其他系统对象 1.Control 对象与Control 集合对象 Control 对象为所有Visual Basic 内部控件的类名。可以将一个变量标为 Control 对象,然后象把控件放到窗体上一样来引用它。下面是使用Control 对象的实例: Private Sub Command3_Click() Dim c As Control For Each c In Form1.Controls Print c.Name Next Set c = Command1 Print c.Name End Sub 程序运行时,首先打印窗体上所有控件的名称,然后在打印变量c的名称(即Command1)。 Control 集合对象包含窗体上所有控件。
2.Form1对象 Form对象是窗口、或者对话框。Forms 集合是一个集合,它的元素代表每一个在应用程序中加载的窗体。集合包括应用程序的 MDI 窗体,MDI 子窗体和非 MDI 窗体。Forms 集合只有一个属性 Count,指定集合中元素的数目。下面的实例的作用是,当Form1成为活动窗体时,在窗体上名为lstAllForms的列表框中显示所有已经加载的窗体和对话框的标题。 Private Sub Form_Activate() Dim I ' Declare variable. ' 重新填充列表(当添加或删除一个实例时)。 lstAllForms.Clear ' Clear list box. For I = 0 To Forms.Count - 1 lstAllForms.AddItem Forms(I).Caption Next I End Sub
3.Err对象 Err对象含有关于运行时错误的信息。Err 对象是具有全局范围的固有对象。在代码中没有必要建立这些对象的实例。 Err 对象的缺省属性是 Number。 当运行时错误发生时,Err 对象的属性被填入明确识别错误的信息以及处理这个错误所使用的信息。 Err 对象有两个方法,Raise 方法用于在代码中生成运行时错误。Clear 方法用于清除 Err 对象的所有属性设置。 在任意形式的 Resume 或 On Error 语句之后以及在错误处理子程序内的 Exit Sub、Exit Function、或 Exit Property 语句之后,可使用 Clear 方法将 Err 对象的属性重新设置为零或长度为零的字符串 ("")。
例11-6:下面的程序使用 Err 对象的各个属性建立一个显示错误信息的对话框(参见图11-7)。 Private Sub Command1_Click() Dim Msg On Error Resume Next ' 改变错误处理的方式 Err.Clear m = 10 / 0 ' 生成一个“除数为零”错误。 If Err.Number <> 0 Then ' 检查错误代号 Msg = Err.Source & "产生" & Str(Err.Number) & " 号错误," & "错误原因:" & Chr(13)_ & Err.Description MsgBox Msg, , "错误", Err.HelpFile, Err.HelpContext ' 显示错误信息 End If End Sub 图11-7 应用Err对象实例
11.3 文件系统对象模型 11.3.1Scripting 类型库 11.3.2 FileSystemObject 对象 11.3.3 Drive 对象 11.3.4 Folder对象 11.3.5 File对象 11.3.6 TextStream对象 返回 退出
11.3.1Scripting 类型库 FSO包含在Scripting 类型库中,如果要在工程中使用FSO,就必须添加对Scripting 类型库的引用。单击“工程 | 引用”命令,打开“引用”对话框,选中“Microsoft Scripting Runtime”复选框,即可将FSO对象模型引入到系统中。FSO 对象模型包括表11-4所示5个对象。按F2 键打开“对象浏览器”,在Scripting 类型库中了解FSO 对象模型中各种对象、集合、属性、方法、事件以及它的常数的信息。参见图11-8。 表11-4 FSO 对象模型中的对象
图11-8 了解FSO 对象的有关信息 FSO 对象模型编程的基本过程为: (1)使用CreateObject 方法,或将一个变量声明为 FileSystemObject 对象类型来创建一个 FileSystemObject 对象。 (2)对新创建的对象使用适当的方法。 (3)访问该对象的属性。
11.3.2 FileSystemObject 对象 1.创建 FileSystemObject 对象 可以通过如下两种方法创建一个 FileSystemObject 对象: (1)使用New关键字将一个变量声明为 FileSystemObject 对象类型 Dim Myfso As New FileSystemObject (2)使用 CreateObject 方法来创建一个 FileSystemObject 对象 Dim Myfso As Object Set Myfso = CreateObject("Scripting.FileSystemObject") 2.FileSystemObject对象的属性 FileSystemObject对象只有一个属性,即Drive属性,用来返回包含本地机器上所有可用 Drive 对象的 Drives 集合。下述代码可在立即窗口显示系统中可用驱动器的名称。 Private Sub ShowDriveList() Dim myfso, mydc, d, str Set myfso = CreateObject("Scripting.FileSystemObject") Set mydc = myfso.Drives For Each d In mydc str = str & d.DriveLetter & " - " Next Debug.Print str End Sub
3.FileSystemObject对象的方法 表11-5 .FileSystemObject对象的方法
11.3.3 Drive 对象 Drive 对象用于对特定磁盘驱动器或网络共享的属性提供访问。要使用Drive对象,应首先声明一个驱动器类型变量,然后使用.FileSystemObject对象的GetDrive方法来返回一个Drive对象,例如: Dim Mydrv As Drive Set Mydrv =Myfso.GetDrive("C") 表11-6 Drive 对象的常用属性
例11-7:下列示例说明了如何使用ListView列表视图控件和Drive 对象来收集有关驱动器的信息。 Private Sub Command1_Click() Dim Myfso As New FileSystemObject, Mydrv As Drive, s As String For Each Mydrv In Myfso.Drives With ListView1.ListItems.Add(, ,Mydrv.DriveLetter & ":") .SubItems(1) = Choose(Mydrv.DriveType, "软盘", "硬盘", "硬盘", "光盘") .SubItems(2) = Mydrv.TotalSize / 1024 .SubItems(3) = Mydrv.FreeSpace / 1024 End With Next End Sub 图11-9 显示驱动器信息
11.3.4 Folder对象 Folder对象提供对一个文件夹所有属性的访问。要使用Folder对象,应首先声明一个文件夹类型的变量,然后用FileSystemObject对象的GetFolder方法来返回一个Folder对象,如: Dim Myfld As Folder Set Myfld = Myfso.GetFolder("C:\Myfolder") 表11-7 Folder对象的常用属性
11.3.5 File对象 File对象提供对文件所有属性的访问。要使用File对象,应首先声明一个文件夹类型的变量,然后用FileSystemObject对象的GetFile方法来返回一个File对象,如: Dim Myfile As File Set Myfile = Myfso.GetFile ("C:\Myfolder\file1.txt") 表11-8 File对象的常用属性
File对象的方法有Copy、Delete、Move等。对一个 File 或 Folder,Copy 方法的结果和执行 FileSystemObject.CopyFile 或FileSystemObject.CopyFolder 操作的结果是一样的,在后者中, 对象所引用的文件或文件夹是作为参数传递的。应当注意,后面的方法能够复制多个文件或文件夹。 Private Sub Command1_Click() Dim Myfso As New FileSystemObject , Mydrv As Drive , Myfile As File Set Mydrv = Myfso.getdrive("A:") Set Myfile = Myfso.GetFile("C:\My Documents\employee.txt") If Not Mydrv.isready Then MsgBox " 请在A驱插入软盘 " Exit Sub End If If Mydrv.FreeSpace < Myfile.Size Then MsgBox " 软盘剩余空间不够,请更换软盘 " Exit Sub End If If Not Myfso.folderexists("A:\temp") Then Myfso.createfolder ("A:\temp") Myfile.Copy "A:\temp\tmfile.txt" End If End Sub
11.3.6 TextStream对象 1. TextStream对象的声明、创建及其属性和方法 TextStream对象用于读写顺序文件。FSO 对象模型尚不支持创建随机文件或二进制文件。要创建随机文件和二进制文件,请参考“文件”一章。 声明TextStream对象的语句为: Dim Myts As TextStream 然后,可以如下两种方法打开和创建TextStream对象: (1)使用FileSystemObject 对象创建和打开TextStream对象 Set Myts = Myfso.CreateTextFile("c:\testfile.txt", ForReading,True) 这里,要打开的文件为"c:\testfile.txt",参数ForReading表示从文件读出信息(Forwriting则为向文件写入信息,ForAppending表示向追加信息),True表示如果文件"c:\testfile.txt"不存在,则创建一个新的文件。 (2)使用File对象创建和打开TextStream对象 Set Myfile = Myfso.CetFile("c:\testfile.txt") Set Myts = Myfile.OpenAsStream(ForReading)
表11-9 TextStream对象的常用属性 • 表11-10 TextStream对象的常用方法
2. 用 FSO创建文件、添加以及读取数据 (1)用 FSO创建文件 有三种不同方法来创建一个顺序文本文件(TextStream 文件)。 1) 使用 CreateTextFile 方法 Dim Myfso As New FileSystemObject, Myfil As File Set Myfil = Myfso.CreateTextFile("c:\Mytestfile.txt",True) 这样,就在C盘的根目录下创建了一个空的、名为Mytestfile.txt的TextStream 文件。 2)使用OpenTextFile 方法 Dim Myfso As New FileSystemObject, Myts As New TextStream Set Myts = Myfso.OpenTextFile("c:\ Mytestfile.txt", ForWriting) 3)使用OpenAsTextStream 方法: Dim Myfso As New FileSystemObject, Myfil As File, Myts As TextStream Set Myfso = CreateObject("Scripting.FileSystemObject") Myfso.CreateTextFile ("Mytestfile.txt") Set Myfil = Myfso.GetFile("Mytestfile.txt") Set Myts = Myfil.OpenAsTextStream(ForWriting)
(2)添加数据 文本文件一经创建,就可以分三步向其中加入数据。 第一步:打开文本文件以备写入数据。 第二步:写入数据。 第三步:关闭文件。 要打开文件,可以使用下面两种方法中的任一种: File 对象的 OpenAsTextStream 方法,或 FileSystemObject 对象的 OpenTextFile 方法。 要向打开的文本文件中写入数据,可以使用 TextStream 对象的 Write 或 WriteLine 方法。它们之间的唯一差别是 WriteLine 在指定的字符串末尾添加换行符。WriteBlankLines 方法为向文本文件中添加一个空行。 要关闭一个已打开的文件,应使用 TextStream 对象的 Close 方法。
(3)读取数据 可以使用 TextStream 对象的 Read、 ReadLine 或 ReadAll 方法,从一个文本文件中读取数据。 如果使用 Read 或 ReadLine 方法并且想要跳过数据的某些部分,可以使用 Skip 或 SkipLine 方法。 例11-8:创建一个新的TextStream文件,分别使用Write、WriteLine和WriteBlankLines方法向其中添加数据,然后读出文件中的数据,并使用MsgBox对话框显示数据。 Private Sub Command1_Click() ' 创建一个新的TextStream文件并添加数据 Dim Myfso, Mytxtfile Set Myfso = CreateObject("Scripting.FileSystemObject") Set Mytxtfile = Myfso.CreateTextFile("c:\Mytestfile.txt", True) Mytxtfile.Write ("为TextStream文件添加新的数据" + vbNewLine) ' 写入新的数据 Mytxtfile.WriteLine ("添加一行数据") ' 写入一行带有换行符的文本 Mytxtfile.WriteBlankLines (2) ' 向文件中写入两个换行符 Mytxtfile.Close ' 关闭TextStream文件Mytxtfile End Sub Private Sub Command2_Click() ' 读取TextStream文件中的数据 Dim Myfso As New FileSystemObject, Mytxtfile, Myfil1 As File, Myts As TextStream Set Myfil1 = Myfso.GetFile("c:\Mytestfile.txt") Set Myts = Myfil1.OpenAsTextStream(ForReading) ' 读取文件的内容 str = Myts.ReadAll MsgBox str Myts.Close End Sub