运行这个窗体,从驱动器列表框中选择保存有图片的驱动器,从目录列表框中选择保存有图片的目录,在文件列表框中单击想要显示的文件,如果是图片文件,则图片会显示在左下方,如果不是图片文件或该程序不支持这种格式,则会在图片右边给出提示,其效果如图8-13所示。

图8-13 正在浏览图片
也可以通过资源管理器,将找到的图片文件直接拖拽到图像控件上,如图8-14所示。

图8-14 正在将图片文件拖拽到图像控件上
选中不再需要的文件,单击【删除】按钮,还可以将这些文件移动到回收站,其效果如图8-15所示。

图8-15 正在删除文件
新建一个窗体,设置其MaxButton属性为False。在上面画一个文本框,设置其MultiLine属性为True,ScrollBars为3-Both,画一个框架,在框架上放置十一个命令按钮,再画一个通用对话框控件,其布局如图8-16所示。

图8-16 一个简单的文本编辑器设计界面的布局
在其代码窗口中输入如下代码:
Private FileName As String '定义模块级的变量
Private IsNew As Integer
Private NotSave As Integer
Private Sub SaveAs()
Dim Handle As Integer
Handle = FreeFile()
If IsNew > 0 Then '按下打开按钮的情况下,IsNew的值是0,IsNew==1,说明按了新建按钮,2按下了另存为按钮
CommonDialog1.FileName = FileName
CommonDialog1.CancelError = True '按“取消”键会触发错误
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlOFNOverwritePrompt '若文件已存在,提示是否要覆盖
CommonDialog1.Filter="TextFiles(*.txt)|*.txt|BatchFiles (*.bat)|*.bat|INI files(*.ini)|*.ini|*.*|*.*"
CommonDialog1.FilterIndex = 1 '指定缺省的过滤器
CommonDialog1.ShowSave:FileName = CommonDialog1.FileName
End If
On Error GoTo WriteError
Open FileName For Output Shared As #Handle 'Append是追加到尾部,这里不用之
'Write #handle, Text1.Text 用write要在字符串首尾加双引号,而print不
Print #Handle, Text1.Text
Close #Handle
Command1.Enabled = True:Command4.Enabled = False:Command5.Enabled = False
IsNew = 0:NotSave = 0
Exit Sub
WriteError:
MsgBox "写磁盘错误,可能磁盘有问题或文件具有只读属性!", 48, "写盘错误!"
ErrHandler: '用户按了“取消”按钮
Exit Sub
End Sub
Private Sub Form_Load()
Me.BorderStyle = 1 '固定大小
Me.Caption = "一个简单的的文本编辑器"
Text1.BackColor = &HFFFFFF
Text1.ForeColor = &H0&
Text1.Font.Size = 10
Text1.Text = Space(0)
Text1.MaxLength = 65535 '最大只能是64k
Text1.Locked = True '不能修改,但可以选择,复制
Text1.Enabled = False '不能修改,复制,只能显示
Frame1.Caption = "请选择:":Command1.Caption = "新建"
Command2.Caption = "打开"
Command3.Caption = "修改":Command4.Caption = "保存"
Command5.Caption = "另存为":Command6.Caption = "清除"
Command7.Caption = "关闭":Command8.Caption = "背景颜色"
Command9.Caption = "前景颜色":Command10.Caption = "字体"
Command11.Caption = "打印":Command6.Cancel = True '默认按Esc时,执行此命令
Command7.TabIndex = 0:Command3.Enabled = False
Command4.Enabled = False
Command5.Enabled = False
FileName = Space(0)
IsNew = 1 '1为新建,0为打开,2为另存为
NotSave = 0 '1没有存过盘,其他保存过,此处初始化为0,这样一旦什么也没有输入时,就不再问存盘了
End Sub
Private Sub Command1_Click()
Text1.Text = Space(0):Text1.Locked = False:Text1.Enabled = True
Text1.SetFocus
Command1.Enabled = False
Command3.Enabled = False
IsNew = 1
End Sub
Private Sub Command2_Click() '若连续打开文件,后者将插入到前者的尾部
Dim Str0 As String '不要使用str,因为这是一个数值转为字符串的函数名
Dim Str1 As String
Dim Handle As Integer
Text1.Enabled = True:CommonDialog1.CancelError = True '按“取消”键会触发错误
On Error GoTo ErrHandler
CommonDialog1.Filter= "Text Files(*.txt)|*.txt|Batch Files (*.bat)|*.bat|INI files(*.ini)|*.ini|*.*|*.*"
CommonDialog1.FilterIndex = 1 '指定缺省的过滤器
CommonDialog1.ShowOpen:FileName = Space(0):FileName = CommonDialog1.FileName
Handle = FreeFile():Open FileName For Input Shared As #Handle:Str1 = Space(0)
Do While Not EOF(Handle)
Input #Handle, Str0
Str1 = Str1 + Str0 + Chr(13) + Chr(10)
Loop
Close #Handle
If Len(Str1) <= 65535 Then
Text1.Text = Str1
'Text的值变了,触发Change事件,使NotSave为1,而事实上,数据尚未改动过
'故,将Change中的值再恢复为原值,就是下面的三个语句
Command4.Enabled = False:Command5.Enabled = False:NotSave = 0
Command1.Enabled = False:Command3.Enabled = True
Else
MsgBox "文件字节数不能超过64K!", vbOKOnly, "超出范围!"
End If
IsNew = 0:NotSave = 0:Exit Sub
ErrHandler: '用户按了“取消”按钮
Exit Sub
End Sub
Private Sub Command3_Click()
Text1.Locked = False:Text1.Enabled = True:Text1.SetFocus
End Sub
Private Sub Command4_Click()
Call SaveAs
End Sub
Private Sub Command5_Click()
IsNew = 2:Call SaveAs
End Sub
Private Sub Command6_Click()
Text1.Text = Space(0)
End Sub
Private Sub Command7_Click()
Unload Me
End Sub
Private Sub Command8_Click()
CommonDialog1.CancelError = True '按下取消键时触发错误事件
On Error GoTo ErrHandler
CommonDialog1.Flags = cdCCFullOpen '显示全部的对话框,包括自定义颜色部分
CommonDialog1.ShowColor:Text1.BackColor = CommonDialog1.Color
Text1.SetFocus '当Text1的Enabled为假时,此语句也会触发错误事件
Exit Sub
ErrHandler: '此处是错误处理程序,这里为空语句
If Text1.Enabled = "True" Then
Text1.SetFocus
End If
End Sub
Private Sub Command9_Click()
CommonDialog1.CancelError = True:On Error GoTo ErrHandler
CommonDialog1.Flags = cdCCFullOpen '显示全部的对话框,包括自定义颜色部分
CommonDialog1.ShowColor:Text1.ForeColor = CommonDialog1.Color:Text1.SetFocus
Exit Sub
ErrHandler: '此处是错误处理程序,这里为空语句
If Text1.Enabled = "True" Then
Text1.SetFocus
End If
End Sub
Private Sub Command10_Click()
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
CommonDialog1.Flags = cdlCFEffects Or cdlCFBoth Or cdlCFApply
CommonDialog1.FontName = Text1.FontName '无此句,字体列表框处将无默认字体
CommonDialog1.ShowFont
Text1.FontName = CommonDialog1.FontName
Text1.FontSize = CommonDialog1.FontSize
Text1.FontBold = CommonDialog1.FontBold
Text1.FontItalic = CommonDialog1.FontItalic
Text1.FontUnderline = CommonDialog1.FontUnderline
Text1.FontStrikethru = CommonDialog1.FontStrikethru
Text1.ForeColor = CommonDialog1.Color:Text1.Refresh:Text1.SetFocus:Exit Sub
ErrHandler: '此处是错误处理程序,这里为空语句
If Text1.Enabled = "True" Then
Text1.SetFocus
End If
End Sub
Private Sub Command11_Click()
Dim X As Printer
CommonDialog1.CancelError = True
On Error GoTo ErrHandler
For Each X In Printers
If X.DeviceName = "Star AR-3200+" Then
Set Printer = X '设定为系统缺省打印机。
Exit For ' 终止查找打印机。
End If
Next
CommonDialog1.ShowPrinter:Printer.Print Text1.Text '打印输出
Printer.EndDoc '打印结束
Text1.SetFocus '当Text1的Enabled为假时,此语句也会触发错误事件
Exit Sub
ErrHandler: '此处是错误处理程序,这里为空语句
If Text1.Enabled = "True" Then
Text1.SetFocus
End If
End Sub
Private Sub Text1_Change()
Command4.Enabled = True:Command5.Enabled = True:NotSave = 1
End Sub
Private Sub Form_Unload(Cancel As Integer)
Dim Tmp As Variant
If NotSave = 1 Then
If FileName = Space(0) Then
FileName = "未命名"
End If
Tmp = MsgBox("是否保存对" + FileName + "的修改?", vbYesNoCancel + vbQuestion, "一旦丢失数据,有耕耘必有收获仍然是真话,只不过收获的是......")
Select Case Tmp
Case vbYes:
Call SaveAs
Case vbCancel:
Cancel = 1
End Select
End If
End Sub
运行此窗体,其初始界面如图8-1所示。此程序的功能介绍可参见本章的项目界面及其要求部分,这里不再赘述。
一、简答题
1.什么是文件?什么是顺序文件?什么是随机文件?什么是二进制文件?它们的主要特点是什么?
2.什么是文件缓冲区?问什么要设文件缓冲区?
3.什么是数据文件?数据文件与其他文件的关系是什么?
4.从存储信息的形式来看,文件可以分为几类?分别是什么?
5.VB的文件系统能处理哪几种类型的文件?
6.什么是文件号?在打开、读写和关闭文件时,文件号起什么作用?
7.文件按照存取方式分为几种?
8.简述文件操作的步骤。
9.试比较Input和Line Input语句在使用中的异同。
10.试比较Print #和Write #语句在使用上的异同。
11.什么是文件的指针?如何实现文件指针的定位?
12.怎样触发驱动器列表框和目录列表框的Change事件?这两个控件的Change事件在程序设计中有什么作用?
二、程序设计题
1.某学校有在校生2300名,编程序将他们的学号、姓名、班级、性别、籍贯、入学分数、特长、专业、生活津贴输入到一个顺序文件中,文件名为“Resume.DAT”。
2.将刚入学的学生数据追加到“Resume.DAT”文件中。
3.从上述“Resume.DAT”文件中读出全部数据,并将其中所有“赵”姓写入到“SurnameIsZhao.DAT”文件中。
4.删除“SurnameIsZhao.DAT”文件中所有籍贯为河南的学生,然后给每人提高20%的生活津贴,将修改后的数据仍然保存在“SurnameIsZhao.DAT”文件中。
5.将1题的顺序文件改成随机文件,重做1、2、3、4题。
6.编程实现将一个大文件分割成N个小文件,N数由用户指定。
7.编程实现将上述已经分割的N个小文件重新合并为一个文件。
8.编程实现将一个视频文件中的片断截取下来,写入到另一个文件中。
9.设计一个可以用计算机进行考试的程序,考题全部由判断题组成,要求该程序应具有出题、修改考题、随机产生考题、考试、上一题、下一题、交卷等功能,考题应保存在文件中,考生准考证号、姓名和考试成绩也要保存在文件中。
10.设计一个歌手大赛的评分程序,要求定义一个由报名号、姓名、5位评委成绩、总成绩、平均分和排名组成的记录类型,程序应具有输入歌手数据、去掉一个最高分、去掉一个最低分、计算总分、均分,最后由高到低输出歌手排名等功能。歌手数据要保存在文件中。
11.设计一个在指定目录下判断给出的文件或子目录是否存在的窗体,指定的目录和要查找的文件或子目录输入到文本框中,用命令按钮实现查找,用MsgBox对话框输出查找结果。