VB60程序设计教案72.docx
- 文档编号:9494717
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:23
- 大小:425.78KB
VB60程序设计教案72.docx
《VB60程序设计教案72.docx》由会员分享,可在线阅读,更多相关《VB60程序设计教案72.docx(23页珍藏版)》请在冰豆网上搜索。
VB60程序设计教案72
7.2制作记事本程序
一、复习
1、掌握驱动器列表框控件(DriveListBox)的常用属性和事件;
2、掌握目录列表框控件(DirListBox)的常用属性和事件;
3、掌握文件列表框控件(FileListBox)的常用属性和事件。
二、本节重点
1、掌握打开顺序文件;
2、掌握从文件中读取字符串;
3、掌握把字符串写入文件。
导入:
上一章讨论了VisualBasic中学习了文件系统控件包括驱动器列表框控件(DriveListBox)、目录列表框控件(DirListBox)和文件列表框控件(DriveListBox)控件的常用属性和事件。
本节课我们来通过制作小程序,学习菜单的创建、通用对话框的使用、文件的基本操作(打开顺序文件\从文件中读取字符串\把字符串写入文件)。
三、内容学习
1、打开顺序文件
当以顺序型访问方式打开一个文件时,即可以向文件输入字符(Input)、从文件输出字符(output),也可以把字符加到文件(Append)中。
打开顺序文件,我们可以使用Open语句。
它的格式如下:
OpenpathnameFor[Input|Output|Append]As[#]filenumber[Len=buffersize]
Open文件名[For模式][Access存取类型][锁定]As[#]文件号[Len=记录长度]
(1)文件名(pathname)表示要打开的文件名,文件名可以包含有驱动器和目录;
(2)模式[Input|Output|Append]用于指定文件访问的方式,包括:
Input——顺序输入(输入给自己,从txt中取出)
Output——顺序输出(输出到txt中)
Append——从文件末尾添加
Binary——二进制文件
Random——随机存取方式
(3)文件号(filenumber)用于为打开的文件指定文件号.对文件进行读写操作时,要用文件号表示该文件.文件号是介于1~511之间的整数,既可以是数字,又可以是变量.也可以省略不用.
(4)存取类型:
访问文件的类型,为Read(只读)、Write(只写)、ReadWrite(读写)
(5)锁定:
限制其他用户或其他进程对文件进行读写操作
Shared(共享)、LockRead(禁止读)、LockWrite(禁止写)、
LockReadWrite(禁止读写)
(6)Len:
用来指定缓冲区的字符数
当在文件与程序之间拷贝数据时,Len=buffersize子句指定缓冲区的字符数.
说明:
当打开顺序文件作为Input时,该文件必须已经存在,否则会产生一个错误。
当打开一个不存在的文件作为Output或Append时,Open语句首先创建该文件,然后再打开它。
在打开一个文件Input、Output或Append以后,在为其他类型的操作重新打开它之前必须先使用Close语句关闭它,语法格式如下:
Close[[#]filenumber][,[#]filenumber]...
其中可选的filenumber参数为任何有效的文件号。
若省略filenumber参数,则将关闭Open语句打开的所有活动文件。
在执行Close语句时,文件与其文件号之间的关联将终结。
2、从文件中读取字符串
要检索文本文件的内容,应以顺序Input方式打开该文件。
然后使用LineInput#语句、Input()函数或者Input#语句将文件复制到程序变量中。
(1)LineInput#语句
该语句从打开的顺序文件中读取一行数据。
这里的一行指的是从当前指针位置开始到回车符或回车换行符之间的所有数据。
LineInput#语句的语法格式如下:
LineInput#文件号(filenumber),变量号(varname)
说明:
参数filenumber参数指定任何有效的文件号是;varname参数是变体或字符串变量名,使用来存放读出数据的一个或多个变量,如果有多个变量,中间用空格分割开。
Input#语句为参数列表中的每一个变量读取文件的一个域,并将读出的域存入变量中。
该语句只能顺序的从第一个域开始,直到读取想要的域。
(2)Input函数
此函数可以从顺序文件中一次读取指定长度的字符串。
具体地说,就是从文件的当前位置开始,读取指定个数的字符,然后将他们返回。
Input函数可以读取包括换行符,回车符,空格符等在内的各种字符。
下面是它的语法格式:
Input(number,[#filenumber])
变量=Input(串长度,文件号)
例如,要从一个打开文件中读取12个字符并复制到变量file中,我们可以这样写:
file=Input(12,filenum)
如果要将整个文件复制到变量,请使用InputB函数将字节从文件复制到变量。
由于InputB函数返回一个ASCII字符串,因此,必须用StrCopy函数将ASCII字符串转换为Unicode字符串。
代码如下:
file=StrCopy(Input(LOF(filenanum),filenum),vbUnicode)
其中LOF函数返回一个长整型数,表示用Open语句打开的文件的大小(以FileNum为文件号),该文件以字节为单位。
其中StrCopy(String,vbUnicode)函数将String转换为Unicode代码。
读取中文信息时,应进行这种转换。
(3)Input#语句
Input#语句从已打开的顺序文件中读出数据并将数据指定给变量
语法格式:
Input#filenumber,varlist
Input#文件号,变量列表
其中filenumber参数指定任何有效的文件名,varlist是用逗号分界的变量列表,将文件中读出的值分配给这些变量。
例如,我们要在文件student.txt中写入数据,下面是代码:
Open"student.txt"ForOutputAs#filenum
Write#filenum,"张三","初一年级",14
Write#filenum,"李四","职业高中",18
DimnameAsString,nianjiAsString,ageAsInteger
Dimname1AsString,nianji1AsString,age1AsInteger
Open"student.txt"ForInputAs#filenum
Input#filenum,name,nianji,age
Input#filenum,name1,nianji1,age1
Close#filenum
执行结果:
name=”张三”,nianji=“初一年级”,age=14
name=”李四”,nianji=“职业高中”,age=18
3、把字符串写入文件
若要在顺序文件中存储变量的内容,应以顺序Output或Append打开它,然后使用Write#和Print#语句将格式化显示的数据写入顺序文件中。
下面是他们的格式和说明:
Print#的语法格式:
Print#文件号(filenumber),变量列表(outputlist)
例如,将文本框中的文本写到文件中,代码如下:
Open"file.txt"ForOutputAs#filenum
Input#filenum,text1.text
本任务:
print#1,Text1.text
Write#语句的语法格式:
Write#文件号,变量列表
说明:
用Write#语句写入的信息便于以后用Input#语句来读取数据,因为Write#语句自动将写入到文件中的信息用逗号分开,并为字符串数据加上双引号.例如:
Open"student.txt"ForOutputAs#filenum
Write#filenum,"张三","初一年级",14
Write#filenum,"李四","职业高中",18
四、本节任务
编程设计:
在本任务中制作一个类似于记事本的文本编辑程序,可以用于打开、编辑和保存文本文件,程序运行效果如下图所示。
设计步骤:
1、在VisualBasic集成开发环境中新建一个EXE工程,并把窗体文件和工程文件分别命名并保存。
2、利用属性窗口对窗体Form1的以下属性进行设置。
将其Caption属性设置为“文档-记事本”。
3、在窗体Form1上添加以下控件。
⏹按照表7-1的设置创建菜单系统
⏹文本框Text1,将其ScrollBars属性设置为2-Vertical,Text属性清空
⏹通用对话框控件dlg,将其DefaultExt属性设置为“txt”,Filter属性设置为“*.txt”
4、在窗体Form1的代码窗口中编写以下事件过程。
'声明模块级变量
PrivatesFilenameAsString
PrivatesFileContentAsString
PrivateCancelErrorAsBoolean
'定义自定义函数,用于检查文件内容是否改变并提示用户做出选择
PrivateFunctionCheckFile()
DimchoiceAsInteger
CheckFile=0
IfText1.Text<>sFileContentThen
choice=MsgBox("文件内容已被更改,保存文件吗?
",vbQuestion+vbYesNoCancel,"记事本")
Ifchoice=vbYesThen'若单击"是"
CheckFile=1
ElseIfchoice=vbNoThen'若单击"否"
CheckFile=2
Else'若单击取消
CheckFile=3
EndIf
EndIf
EndFunction
'加载窗体时执行以下事件过程
PrivateSubForm_Load()
sFilename=""
sFileContern=""
EndSub
'当第一次显示窗体或改变窗体大小时执行以下事件过程
PrivateSubForm_Resize()
Text1.Left=0
Text1.Top=0
Text1.Height=Me.ScaleHeight'ScaleWidth、ScaleHeight指的是除去边框和标题栏后的即内部的实际大小即每部大小。
Text1.Width=Me.ScaleWidth
EndSub
'卸载窗体时执行以下事件过程
PrivateSubForm_Unload(CancelAsInteger)
DimchoiceAsInteger
choice=CheckFile()
Ifchoice=1Then
mnuFileSave_Click
Cancel=CancelError
ElseIfchoice=3Then
Cancel=1
EndIf
EndSub
'在菜单栏单击"编辑"菜单项时执行以下事件过程
PrivateSubmnuEdit_Click()
mnuEditCut.Enabled=(Text1.SelLength>0)
mnuEditCopy.Enabled=(Text1.SelLength>0)
mnuEditPast.Enabled=(Clipboard.GetText<>"")
EndSub
'从"编辑"菜单中选择"复制"命令时执行以下事件过程
PrivateSubmnuEditCopy_Click()
Clipboard.Clear'清空剪贴板
Clipboard.SetTextText1.SelText'将当前所选择文本的字符串赋给剪贴板
EndSub
'从"编辑"菜单中选择"剪切"命令时执行以下事件过程
PrivateSubmnuEditCut_Click()
Clipboard.Clear'清空剪贴板
Clipboard.SetTextText1.SelText'将当前所选择文本的字符串赋给剪贴板
Text1.SelText=""'将当前所选择文本的字符串赋为空字符串
EndSub
'从"编辑"菜单中选择"日期/时间"命令时执行以下事件过程
PrivateSubmnuEditDateTime_Click()
Text1.SelText=Now
EndSub
'从"编辑"菜单中选择"粘贴"命令时执行以下事件过程
PrivateSubmnuEditPast_Click()
Text1.SelText=Clipboard.GetText'将剪贴板中文本赋给text1
EndSub
'从"编辑"菜单中选择"全选"命令时执行以下事件过程
PrivateSubmnuEditSelectAll_Click()
Text1.SelStart=0'返回或设置所选择的文本的起始点
Text1.SelLength=Len(Text1.Text)'返回或设置所选择的字符数
EndSub
'从"编辑"菜单中选择"退出"命令时执行以下事件过程
PrivateSubmnuFileExit_Click()
UnloadMe
EndSub
'从"文件"菜单中选择"新建"命令时执行以下事件过程
PrivateSubmnuFileNew_Click()
DimchoiceAsInteger
choice=CheckFile()
Ifchoice=1Then
mnuFileSave_Click
ElseIfchoice>1Then
ExitSub
EndIf
Text1.Text=""
Me.Caption="文档-记事本"
sFilename=""
sFileContent=""
EndSub
'从"文件"菜单中选择"打开"命令时执行以下事件过程
PrivateSubmnuFileOpen_Click()
OnErrorGoToErrorHandler
DimchoiceAsInteger
choice=CheckFile()
Ifchoice=1Then
mnuFileSave_Click
ElseIfchoice=3Then
ExitSub
EndIf
dlg.DialogTitle="打开"
dlg.FileName=""
dlg.ShowOpen
Ifdlg.FileName<>""ThensFilename=dlg.FileName
Me.Caption=dlg.FileTitle&"-记事本"
OpensFilenameForInputAs1
Text1.Text=StrConv(InputB(LOF
(1),1),vbUnicode)'将整个文件复制到变量
sFileContent=Text1.Text
Close#1'使用Close语句关闭它
ErrorHandler:
IfErr.Number=32755Then'用户定义的错误
ExitSub
EndIf
EndSub
'从"文件"菜单中选择"保存"命令时执行以下事件过程
PrivateSubmnuFileSave_Click()
IfsFilename=""Then
mnuFileSaveAs_Click
Else
OpensFilenameForOutputAs1
Print#1,Text1.Text'把字符串写入文件
Close#1
EndIf
EndSub
'从"文件"菜单中选择"另存为"命令时执行以下事件过程
PrivateSubmnuFileSaveAs_Click()
OnErrorGoToErrorHandler
dlg.DialogTitle="另存为"
dlg.ShowSave
Ifdlg.FileName<>""ThensFilename=dlg.FileName
Me.Caption=dlg.FileTitle&"-记事本"
mnuFileSave_Click
ExitSub
ErrorHandler:
IfErr.Number=32755Then
CancelError=True
EndIf
EndSub
'从"格式"菜单中选择"字体"命令时执行以下事件过程
PrivateSubmnuFormatFont_Click()
OnErrorGoToErrorHandler'ErrorHandler是行号,启用错误捕捉功能
dlg.DialogTitle="字体2"
dlg.FontBold=Text1.FontBold
dlg.FontItalic=Text1.FontItalic
dlg.FontName=Text1.FontName
dlg.FontSize=Text1.FontSize
dlg.FontStrikethru=Text1.FontStrikethru
dlg.FontUnderline=Text1.FontUnderline
dlg.Flags=cdlCFBothOrcdlCFEffects
dlg.ShowFont
Text1.FontBold=dlg.FontBold
Text1.FontItalic=dlg.FontItalic
Text1.FontName=dlg.FontName
Text1.FontSize=dlg.FontSize
Text1.FontStrikethru=dlg.FontStrikethru
Text1.ForeColor=dlg.Color
ErrorHandler:
'错误处理的开始位置
EndSub
5、按F5运行程序。
五、知识链接
1、自定义函数
虽然VB提供了常用的标准函数P46,可以使用这些标准函数来实现某些数学计算或数据类型的转换,但许多应用程序常常需要自己来定义函数,以实现某种特定的计算。
可以按下面的方式自己来构造(规定)一个函数:
Function函数名(参数表)As数据类型名
语句块
EndFunction
这里,函数名是程序设计者为函数指定的名称。
参数表是对于函数需要的原始数据的类型一一地进行说明。
As后的类型名,是说明函数的计算结果,即函数返回值的数据类型,函数计算完成后,VB自动地把函数返回值送到函数的调用点上,这样,程序的其他部分能对这个结果作进一步的处理,最终完成计算任务。
例:
设计一个函数Leap,判断y年是否是闰年,若是,就返回1,否则,就返回0。
(:
公元纪年的年数可以被四整除,即为闰年;被100整除而不能被400整除为平年;被100整除也可被400整除的为闰年)
我们先构造一个函数Leap(Y):
‘判断y年是否是闰年方法
FunctionLeap(yASInteger)AsInteger
Ifymod100=0Then‘mod是求余数运算符,例:
8mod5=3
Ifymod400=0ThenLeap=1ElseLeap=O
Else
Ifymod4=0ThenLeap=1ElseLeap=0
EndIf
EndFunction
EndFunction之前的语句块,描述了函数的计算过程,在这些语句中,至少要有一个形如
函数名=表达式‘例如:
上函数模块中的Leap=1、Leap=0
的语句,这样,表达式的计算结果才能作为函数的返回值,被VB送到函数的调用点上。
把“判断y年是否是闰年”这样一个计算过程从整个应用程序中分离出来,成为一个独立的模块(模块可以是一个函数,也可以是一个过程),这是一种模块化的程序设计方法。
使用这种方法的好处是:
(1)在设计(构造)这个模块时,需要处理的计算任务比起整个应用程序来相对地要简单些,例如,在这里需要设计的计算过程仅仅是按一定的规则判断y年是否是闰年,并按规定返回O或1这两个结果之一,而不需要考虑数据y是怎么获得的,y年是闰年要进行怎样的处理,y年不是闰年又要进行怎样的处理等问题,这些是应用程序其他部分的任务。
(2)构造了一个程序模块后,在程序的各个部分中可以使用这个模块。
例如:
下面我们要要编制一个完整的程序,输入一个年份y(设y>=1900),输出该年2月份的天数:
分析如下:
28‘y不是闰年;
2月份的天数:
D2=
29‘y是闰年;
可先设D2=28,则:
IFy是闰年thenD2=D2+1
0‘y不是闰年;
可自定义一个函数:
Leap(y)=
1‘y是闰年;
则:
D2=D2+Leap(2012)‘上面我们已经构造一个函数Leap(Y)
因此,输出该年2月份的天数的子程序如下:
SubCommand1_Click()
DimyAsInteger
DimnAsString
n=InputBox("请输入年份:
")
y=Val(n)
d2=28
d2=d2+Leap(y)'调用函数Leap(y),并把的返回值1或0,被VB送到函数的调用点
Text1.Text=d2
EndSub
演示:
把上子程序模块和构造的函数Leap(Y)程序模块放到VB程序窗口中运行,输出指定年号的2月份的天数…。
Function过程的调用方法和内部函数的调用方法相同,语法格式如下:
函数名(【参数列表】)
2、菜单系统
属性名
属性值
说明
标题(Caption)
字符型数据
指定菜单项或菜单命令显示的字符串
名称(Name)
字符型数据
指定菜单控件的名称
索引
整型数据
指定一个数字来确定菜单项或菜单命令在菜单控件数组中的序号,该序号与各菜单控件的位置无关
快捷键
字符型数据
指定菜单命令的快捷键
复选
逻辑型数据
指定是否允许在菜
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB60 程序设计 教案 72
![提示](https://static.bdocx.com/images/bang_tan.gif)