附录B 习题参考答案
习题1
1.1 答:VB的基本特点如下:
·可视化的设计平台。
·面向对象的设计方法。
·事件驱动的编程机制。
·结构化的设计语言。
·充分利用Windows资源。
·开放的数据库功能与网络支持。
1.2 答:VB有如下几个版本:
·VB学习版:VB的学习版可以使程序员方便地创建功能强大的Microsoft Windows和Windows NT的应用程序。这个版本的VB包括所有内部控件以及网
格和数据绑定控件。
·VB专业版:VB专业版提供了功能完整的工具集,软件开发者可以使用这些工具开发各种解决方案。这个版本的VB包括学习版中的所有工具和功能以及附
加的ActiveX控件、Internet信息服务器应用程序设计器、集成的数据工具和数
据环境、活动数据对象,以及动态HTML页面设计器。
·VB企业版:VB的企业版允许开发健壮的分布式应用程序。这个版本的VB包括专业版的所有特征,另外还包括了BackOffice工具,如SQL Server以及其他辅
助工具等。
1.3 答:在安装好VB后,启动“开始”菜单,选择“程序”,选择“Microsoft Visual Basic 6.0中文版”,在出现的下级菜单中选择“Microsoft Visual Basic 6.0中文版”即可启动VB,或者做一个快标,通过双击该快标启动VB。
在VB的集成开发环境中单击“关闭”按钮或者选择“文件”菜单中的“退出”命令时,VB会自动判断用户是否修改了工程的内容,并询问用户是否保存文件或直接退出。
1.4 答:VB系统集成环境包括:
·主窗口:由标题栏、菜单栏和工具栏组成,主要提供了用于开发VB程序的各种命令。
附录B 习题参考答案327
·窗体窗口:用于在窗体中放置各种控件,以建立将要开发的VB应用程序的图形用户界面。
·属性窗口:用于设置所有窗体或控件的属性,如颜色、字体和大小等。
·工程资源管理器窗口:用来显示和保存一个应用程序所有属性以及组成这个应用程序的所有文件。
·工具箱:提供了用于开发VB应用程序的各种控件。
1.5 答:为了定制集成开发环境,选择“工具”菜单下的“选项”菜单项,出现一个“选项”对话框。这个对话框只能在设计时使用,其中包含以下6个选项卡:
·“编辑器”
·“编辑器格式”
·“通用”
·“可连接的”
·“环境”
·“高级”
用户可以修改各选项卡中相应的设置以定制系统集成环境。
习题2
2.1 答:从广义上来说,对象是客观事物中的一个实体。在可视化编程语言中,对象是代码和数据的集合,它可以是窗体和控件,也可以是菜单或数据库等。
对象的事件是预先定义好的、能够被对象识别的动作,如单击(Click事件、双击DblClick)事件、加载(Load)事件、鼠标移动(MouseMove)事件等,不同的对象能够识别不同的事件。
对象的方法是在对象上实施某种操作的效果,即完成某种操作的功能。如打印(Print)方法、显示窗体(Show)方法等,用户可直接调用,不能进行修改。
2.2 答:在VB编程中,完成某种功能可通过触发对象事件和调用对象方法,而响应事件和调用方法都必须基于某个对象。触发某个事件实际上就是执行一个事件过程代码段,在该代码段中又可以随意调用对象方法,而调用对象方法不可能触发某个事件。
例如,在窗体Form1上添加一个命令按钮Command1和一个标签Label1,编写一个响应Command1的单击(Click)事件过程如下:
Private Sub Commmand1_Click()
Label1.Cap tion = “单击命令按钮”
End Sub
单击命令按钮Command1时触发该单击事件,即执行上述代码,在标签上显示相应的信息。
328 Visual Basic程序设计导学
2.3 答:对象的属性是描述对象的一组特征,即描述对象特征的数据。如设置对象的名称、标题、颜色、大小等,有的可直接在设计界面时通过属性窗口进行设置,有的可以在事件过程或通用过程代码中进行设置。对象的方法是在对象上实施某种操作的功能,不能在设计界面时调用对象方法,一般在过程代码中可随意调用,根据需要还可以添加适当的参数。设置对象属性和调用对象方法均可在代码设计中进行,其一般格式为:
对象名.属性名=属性值(设置对象属性)
对象名.方法名(调用对象方法)
例如,设置文本框(Textl)的文本属性(Text)为“计算机世界”:
Text1.Text = "计算机世界"
隐藏窗体Form2的方法:
Form2.Hide
2.4 答:一个工程中应该包含这样几种类型的文件:
·工程文件:用于跟踪所有部件,相当于给出了一份与工程有关的全部文件和对象的清单,其扩展名为.vbp。每个工程都必须对应一个工程文件。
·工程组文件:若程序是由多个工程组成的工程组,则此时会生成一个工程组文件,扩展名为.vbg。
·窗体文件:每个窗体都必须对应一个窗体文件,扩展名为.frm。在一个工程中可以有多个窗体,所以相应存在多个窗体文件。
·模块文件:也叫标准模块文件,一般在大型应用程序中才可能用到,用于合理组织程序结构,扩展名为.bas。主要由代码组成,声明全局变量和一些Public
过程,可被整个程序内的多个窗体调用。该文件可以由用户自己生成,也可以
不存在。
·类模块文件:在Visual Basic中,允许用户自己定义类,每个用户定义的类都必须有一个相应的类模块文件,扩展名为.cls。
·数据文件:为一个二进制文件,用于保存窗体上控件的属性数据。此文件是由系统自动生成的,用户不能对其进行直接编辑。
2.5 设计一个窗体,在其中添加一个标签(名称为Label1)和两个命令按钮(分别为Command1和Command2)。在该窗体上设计如下事件过程:
Private Sub Command1_Click()
'欢迎词命令按钮事件过程
Label1.Caption = "欢迎使用本系统"
End Sub
Private Sub Command2_Click()
'祝贺词命令按钮事件过程
Label1.Caption = "庆祝中华人民共和国成立51周年"
End Sub
附录B 习题参考答案329
2.6 设计一个窗体,按图2.12设计屏幕,三个文本框分别为Text1,Text2和Text3,四个命令按钮从左到右分别为Command1,command2,Command3和Command4。在该窗体上设计如下事件过程:
Private Sub Command1_Click()
Text3.Text = Val(Text1.Text) + Val(Text2.Text)
End Sub
Private Sub Command2_Click()
Text3.Text = Val(Text1.Text) - Val(Text2.Text)
End Sub
Private Sub Command3_Click()
Text3.Text = Val(Text1.Text) * Val(Text2.Text)
End Sub
Private Sub Command4_Click()
If Val(Text2.Text) <> 0 Then
Text3.Text = Val(Text1.Text) + Val(Text2.Text)
End If
End Sub
习题3
3.1 答:False,1ABC,A[7],A-2,A.3和"Comp"不能作为VB的标识符。
3.2 答:变量有name,ff,cj和n。常量有"name",False,"11/16/99","120",#11/16/2000#和12.345。其中:
"name","11/16/99","120"为字符型常量。
False为布尔型常量。
#11/16/2000#为日期型常量。
12.345为数值型常量。
3.3 答:使用声明语句建立一个变量后,VB自动将数值类型的变量赋初值0,变长的字符串被初始化为一个零长度的字符串(""),而定长的字符串则用空格填充。Variant变量被初始化为Empty。将布尔型的变量初始化为False。
3.4 设计一个窗体,在其中放置6个标签(使用Label1控件数组)、6个文本框(使用Text1控件数组)和一个命令按钮Command1。在该命令按钮上设计如下事件过程:
Private Sub Command1_Click()
s = Val(Text1(0).Text) * Val(Text1(1).Text) + _
330 Visual Basic程序设计导学
Val(Text1(2).Text) * Val(Text1(3).Text) + _
Val(Text1(4).Text) * Val(Text1(5).Text)
MsgBox "总金额为:" + Trim(Str(s)), 0, "计算结果"
End Sub
Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
i = Index + 1
If i >= 6 Then i = 0
If KeyAscii = 13 Then
Text1(i).SetFocus
End If
End Sub
3.5 设计一个窗体,在其中放置2个标签(分别为Label1和Label2)、一个文本框(Text1)和一个命令按钮Command1。在该命令按钮上设计如下事件过程:
Private Sub Command1_Click()
Dim s As Integer
Dim a, b, c, revs As String
s = Val(Text1.Text)
If s < 100 Or s > 999 Then Exit Sub
a = Str(s \ 100): s1 = s - Val(a) * 100
b = Str(s1 \ 10): s2 = s1 - Val(b) * 10
c = Str(s2)
revs = c + b + a
Label2.Caption = "反向结果:" + revs
End Sub
3.6 设计一个窗体,在其中放置4个标签(前三个使用Label1控件数组,后一个为Label2)、3个文本框(使用Text1控件数组)和一个命令按钮Command1。在该命令按钮上设计如下事件过程:
Private Sub Command1_Click()
Dim a, b, c, m As Integer
a = Val(Text1(0).Text)
b = Val(Text1(1).Text)
c = Val(Text1(2).Text)
If a < b Then
If b < c Then m = c Else m = b
Else
If a < c Then m = c Else m = a
End If
Label2.Caption = "最大数为:" + Str(m)
End Sub
3.7 设计一个窗体,在其中放置4个标签(前三个使用Label1控件数组,后一个为Label2)、3个文本框(使用Text1控件数组)和一个命令按钮Command1。在该命令按钮上
附录B 习题参考答案331 设计如下事件过程:
Private Sub Command1_Click()
Dim a, b, c, d, x1, x2 As Single
a = Val(Text1(0).Text)
b = Val(Text1(1).Text)
c = Val(Text1(2).Text)
d = b * b - 4 * a * c
If d > 0 Then
x1 = (-b + Sqr(d)) / (2 * a)
x2 = (-b - Sqr(d)) / (2 * a)
Label2.Caption = "两个根:x1=" + Trim(Str(x1)) + " x2=" + Trim(Str(x2))
ElseIf d = 0 Then
x1 = -b / (2 * a)
Label2.Caption = "一个根:x=" + Trim(Str(x1))
Else
Label2.Caption = "没有根"
End If
End Sub
3.8 设计一个窗体,在其中放置2个标签(分别为Label1和Label2)、一个文本框(Text1)和一个命令按钮Command1。在该命令按钮上设计如下事件过程:
Private Sub Command1_Click()
Dim a, s As Single
a = Val(Text1.Text)
Select Case a
Case Is < 20000
s = a * 0.05
Case Is < 30000
s = 20000 * 0.05 + (a - 20000) * 0.1
Case Is < 60000
s = 20000 * 0.05 + (30000 - 20000) * 0.1 + (a - 30000) * 0.2
Case Else
s = 20000 * 0.05 + (30000 - 20000) * 0.1 + (60000 - 30000) * 0.2 + _
(a - 60000) * 0.4
End Select
Label2.Caption = "所得税为:" + Trim(Str(s))
End Sub
3.9 设计一个窗体,在其中放置2个标签(分别为Label1和Label2)、一个文本框(Text1)和一个命令按钮Command1。在该命令按钮上设计如下事件过程:
Private Sub Command1_Click()
Dim a, s, x As Single
a = Val(Text1.Text)
s = 15 * Int((a + 14) / 15)
332 Visual Basic程序设计导学
Select Case s
Case 15
x = 5
Case 30
x = 9
Case 45
x = 12
Case 60
x = 14
Case Else
x = 20
End Select
Label2.Caption = "包裹收费:" + Trim(Str(x))
End Sub
3.10 实现本题功能的事件过程如下:
Private Sun Form_Load
Show
Dim A(1 To 20)
For i=1 To 20
A(i)=Int(Rnd*100)
Next
For Each x In A
If x<60 Then Print x
Next
End Sub
3.11 实现本题功能的事件过程如下:
Private Sub Form_Load
Show
Dim m,n As Integer
Dim A(1 To 10)
For i=1 to 10
A[i]=Int(Rnd*90)+10
Next
m=100:n=-100
For i=1 To 10
If A[i]>n Then n=A[i]
If A[i] Next Print "最大数";n Print "最小数";m End Sub 附录B 习题参考答案333 3.12 实现本题功能的事件过程如下: Private Sub Form_Load() Show Dim n, c, i, j As Integer n = InputBox("输入一个正整数(小于10)", "数据输入", "5") For i = 0 To n - 1 c = 1 Print Tab(30 - 2 * i); c; For j = 1 To i c = c * (i - j + 1) \ j Print c; ; Next Print Next End Sub 3.13 在工程中添加一个窗体,该窗体不包含任何控件,在其上设计如下事件过程: Private Sub Form_Load() Show Dim studname(5)As String * 8 Dim measure(5, 2) As Single studname(1)= "王华": studname(2)= "刘南": studname(3)= "程功" studname(4)= "尚结": studname(5)= "张胜" measure(1, 1) = 180.6: measure(1, 2) = 75.8 measure(2, 1) = 180.4: measure(2, 2) = 68.7 measure(3, 1) = 179.6: measure(3, 2) = 72.5 measure(4, 1) = 170.9: measure(4, 2) = 69.9 measure(5, 1) = 168.2: measure(5, 2) = 65.8 FontName = "楷体_GB2312": FontSize = 16: FontUnderline = True Print Tab(7); "学生身高体重表" Print FontName = "宋体": FontSize = 10 Print "姓名"; Print Tab(15); "身高"; Print Tab(30); "体重" Print FontUnderline = False For i = 1 To 5 Print studname(i); Print Tab(15); Format$(measure(i, 1), "000.0"); Print Tab(30); Format$(measure(i, 2), "00.0") high = high + measure(i, 1) Weight = Weight + measure(i, 2) Next Print 334 Visual Basic程序设计导学 Print FontItalic = True Print "平均"; Print Tab(15); Format$(high / 5, "000.0"); Print Tab(30); Format$(Weight / 5, "00.0") End Sub 3.14 实现本题功能的程序如下: Private Function sum(ByVal m) Dim s,i as Integer For i=1 To m s=s+i Next sum=s End Function Private Sub Form_Load() Dim n,s,i As Integer n=InputBox("输入一个正整数","数据输入","10") For i=1 To n s=s+sum(i) Next MsgBox("总和为: "+Trim(Str(s)),0, "数据输出") End Sub 3.15 实现本题功能的程序如下: Private Sub Form_Load Dim n,s As Integer n=1:s=1 Do While s<=40000 n=n+1:s=s*n Loop MsgBox("最大的n为: "+Trim(Str(n)),0, "数据输出") End Sub 习题4 4.1 添加一个窗体,在其中放置一个标签Label1,将其字体改为“楷体”,字体大小为“二号”,前景颜色为“黑色”。然后单击鼠标右键,复制该标签,然后粘贴,建立控件数组Label1产生另一个标签Lable1(1),将它的前景颜色改为红色,将其使用Ctrl+光标键移动到Label1(0)标签的左上方(为了移动方便,进入“工具”菜单,选择“选项”,选择“通用”选项卡,将显示网格的宽度与高度均改为30,这样移动方便些),这样操作就产生了 附录B 习题参考答案335 本题要求的阴影效果。 4.2 添加一个窗体,在其中放置一个文本框Text1。该文本框的属性如下: FontName "宋体" FontSize 10.5 ForeColor &H00FF0000& MultiLine -1 'True ScrollBars 3 'Both 4.3 添加一个窗体,在其中放置一个命令按钮Command1。该命令按钮的属性如下: Caption "命令按钮" FontName "楷体_GB2312" FontSize 12 ToolTipText "显示命令按钮的提示信息" 4.4 添加一个窗体,在其中放置两个标签和四个复选框(使用Check1控件数组)。在该窗体上设计如下事件过程: Private Sub Command1_Click() If Check1(1)And Check1(3)Then Label2.Caption = "你答对了,真了不起!" Else Label2.Caption = "你答错了,再来一次!" End If End Sub 4.5 添加一个窗体,在其中放置两个标签和四个选项钮(使用Label1控件数组)。在该窗体上设计如下事件过程: Private Sub Option1_Click(Index As Integer) If Index = 1 Then Label2.Caption = "你答对了,真了不起!" Else Label2.Caption = "你答错了,再来一次!" End If End Sub 4.6 添加一个窗体,在其中放置一个文本框Text1和两个框架(分别为Frame1和Frame2)。每个框架中添加两个选项钮(分别为Option1和Option2控件数组)。在该窗体上设计如下事件过程: Private Sub Option1_Click(Index As Integer) If Index = 0 Then Text1.FontName = "宋体" 336 Visual Basic程序设计导学 Else Text1.FontName = "楷体_GB2312" End If End Sub Private Sub Option2_Click(Index As Integer) If Index = 0 Then Text1.FontSize = 10 Else Text1.FontSize = 16 End If End Sub 4.7 添加一个窗体,在其中放置三个列表框,从左到右分别为List1、List2和List3,再放置两个标签。在该窗体上设计如下事件过程: Dim a As Integer Private Sub Form_Load() List1.AddItem ("12") List1.AddItem ("10") List1.AddItem ("5") List1.AddItem ("8") List1.AddItem ("22") List1.AddItem ("25") List1.AddItem ("9") List2.AddItem ("9") List2.AddItem ("15") List2.AddItem ("20") List2.AddItem ("32") List2.AddItem ("18") List2.AddItem ("5") List2.AddItem ("7") List2.AddItem ("32") End Sub Private Sub List1_Click() a = Val(List1.Text) End Sub Private Sub List2_Click() b = Val(List2.Text) List3.AddItem Trim(Str(a)) + "*" + Trim(Str(b)) + "=" + Trim(Str(a * b)) End Sub Private Sub List3_Click() List3.RemoveItem List3.ListIndex End Sub 4.8 添加一个窗体,在其中放置2个标签和一个组合框Combo1。在该窗体上设计如下事件过程: 附录B 习题参考答案337 Private Sub Form_Load() Combo1.AddItem ("北京") Combo1.AddItem ("上海") Combo1.AddItem ("天津") Combo1.AddItem ("广州") Combo1.AddItem ("武汉") Combo1.AddItem ("沈阳") Combo1.AddItem ("合肥") Combo1.AddItem ("长沙") Combo1.AddItem ("重庆") End Sub Private Sub Combo1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then '按Enter键后判断 For i = 1 To Combo1.ListCount If Combo1.Text = Combo1.List(i) Then Label2.Caption = "你的输入已在组合框!" Exit Sub End If Next Label2.Caption = "将你的输入新项添加到组合框中!" Combo1.AddItem (Combo1.Text) End If End Sub 4.9 添加一个窗体,在其中放置一个图片框Picture1和一个计时器Timer1。在该图片框中放置一个标签Label1,其标题为“学生管理系统”,字体为楷体、粗斜体,字体大小为“小三”,前景颜色为红色。将计时器的Interval设置为100。在该窗体上设计如下事件过程: Private Sub Timer1_Timer() If Label1.Left - 30 >= Picture1.Left Then Label1.Left = Label1.Left - 30 Else Label1.Left = Picture1.Left + Picture1.Width - 30 End If End Sub 4.10 添加一个窗体,在其中放置3个标签(前两个使用Label1控件数组,后一个为Label2)、两个文本框(使用Text1控件数组)和一个计时器Timer1。在该窗体上设计如下事件过程: Private Sub Form_Load() '设置响铃的时间,并在文本框中显示 Text1(1).Text = InputBox$("设置响铃时间(时间格式:时:分:秒):", _ "时间设置", "00:01:01") End Sub 338 Visual Basic程序设计导学 Private Sub Timer1_Timer() Text1(0).Text = Time If Text1(1).Text = "" Then Exit Sub t = DateDiff("s", Text1(1).Text, Time$) If Abs(t) < 5 Then '5秒钟以内响铃并提示信息 Label2.Caption = "时间到了!" Beep '响铃 Beep Else Label2.Caption = "" End If End Sub 4.11 添加一个窗体,在其中放置一个图像框Img和一个文本框txt。图像框img的基本属性如下: Name img Height555 Stretch -1 'True Width 675 文本框txt的基本属性如下: Name txt Text "" Height270 Width 675 按住Shift键,单击选中这两个控件,然后复制并粘贴在窗体上,使得窗体上有26个这样的图像框和文本框对。 然后在窗体上放置一个驱动器列表框drive1、目录列表框dir1和文件列表框file1。在该窗体上设计如下事件过程: Private Sub Form_Load() Dir1.Path = Drive1.Drive File1.Path = Dir1.Path File1.Pattern = "*.bmp" File1.Visible = False '使文件列表框不可见 End Sub Private Sub Dir1_Change() File1.Path = Dir1.Path If File1.ListCount = 0 Then Exit Sub m = IIf(File1.ListCount > 26, 26, File1.ListCount) For i = 0 To m – 1 'txt文本框中显示文件名(不含扩展名) txt(i).Text = Left(File1.List(i), Len(File1.List(i)) - 4) 附录B 习题参考答案339 img(i).Picture = LoadPicture(Dir1.Path & "\" & File1.List(i)) Next End Sub Private Sub Drive1_Change() Dir1.Path = Drive1.Drive End Sub 4.12 添加一个窗体,在其中放置一个标签Label2、一个组合框Combo1和一个框架Frame1。在该框架中放置5个标签(使用Label1控件数组)和5个文本框(使用Text1控件数组)。在该窗体上设置如下事件过程: Private Type student '自定义类型 no As Integer name As String * 8 sex As String * 2 rq As Date class As String * 5 End Type Dim stud(1 To 10) As student '定义student类型的数组 Private Sub Form_Load() '给定义的数组赋初值 stud(1).no = 1: stud(1).name = "王华": stud(1).sex = "男" stud(1).rq = #10/2/1980#: stud(1).class = "99091" stud(2).no = 2: stud(2).name = "李强": stud(2).sex = "男" stud(2).rq = #10/4/1981#: stud(2).class = "99101" stud(3).no = 3: stud(3).name = "张丽": stud(3).sex = "女" stud(3).rq = #3/2/1980#: stud(3).class = "99091" stud(4).no = 4: stud(4).name = "汪洋": stud(4).sex = "男" stud(4).rq = #1/5/1980#: stud(4).class = "99101" stud(5).no = 5: stud(5).name = "江华": stud(5).sex = "男" stud(5).rq = #3/10/1980#: stud(5).class = "99091" stud(6).no = 6: stud(6).name = "李英": stud(6).sex = "女" stud(6).rq = #6/2/1980#: stud(6).class = "99101" stud(7).no = 7: stud(7).name = "胡军": stud(7).sex = "男" stud(7).rq = #10/9/1981#: stud(7).class = "99091" stud(8).no = 8: stud(8).name = "刘驰": stud(8).sex = "女" stud(8).rq = #5/2/1982#: stud(8).class = "99101" stud(9).no = 9: stud(9).name = "宋仁": stud(9).sex = "男" stud(9).rq = #8/3/1980#: stud(9).class = "99101" stud(10).no = 10: stud(10).name = "许兵": stud(10).sex = "男" stud(10).rq = #11/8/1980#: stud(10).class = "99091" '将学号都添加到组合框中 For i = 1 To 10 Combo1.AddItem stud(i).no Next 340 Visual Basic程序设计导学 End Sub Private Sub Combo1_Click() i = 1 '查找指定学号的学生记录 Do While Val(Combo1.Text) <> stud(i).no i = i + 1 Loop If i > 10 Then MsgBox "没有该学号的记录", 0, "信息提示" Text1(0).Text = stud(i).no '显示找到的学生记录 Text1(1).Text = stud(i).name Text1(2).Text = stud(i).sex Text1(3).Text = stud(i).rq Text1(4).Text = stud(i).class End Sub 习题5 5.1 设计一个窗体,将其MaxButton和MinButton属性均设置为False。在该窗体上设计如下事件过程: Private Sub Form_Load() Show Caption = "" Appearance = 0 BackColor = vbGreen ForeColor = vbRed: FontUnderline = True FontBold = True: FontSize = 16: FontItalic = True Print Tab(6); "VB程序设计参考书" Print ForeColor = vbBlue: FontUnderline = False FontBold = False: FontSize = 11: FontItalic = False Print "1.龚沛曾等:Visual Basic 程序设计教程" Print "2.李春葆等:Visual Basic 6.0程序设计教程" Print "3.段银由等:Visual Basic 程序设计基础" Print "4.洪国胜:Visual Basic 程序设计" End Sub 5.2 设计一个窗体,在其中添加一个标签,其标题为“中华人民共和国”,再启动菜单编辑器编辑一个菜单,其结构如下: "字体"(Font) "字体"(Font) ...."楷体"(Font1) ...."黑体"(Font2) 附录B 习题参考答案341 ...."仿宋"(Font3) ...."幼圆"(Font4) "大小"(Size) ...."10"(Size1) ...."12"(Size2) ...."16"(Size3) ...."26"(Size4) 在该窗体上设计如下事件过程: Private Sub font1_Click() Label1.FontName = "楷体_GB2312" End Sub Private Sub font2_Click() Label1.FontName = "黑体" End Sub Private Sub font3_Click() Label1.FontName = "仿宋_GB2312" End Sub Private Sub font4_Click() Label1.FontName = "幼圆" End Sub Private Sub size1_Click() Label1.FontSize = 10 End Sub Private Sub size2_Click() Label1.FontSize = 14 End Sub Private Sub size3_Click() Label1.FontSize = 20 End Sub Private Sub size4_Click() Label1.FontSize = 26 End Sub 5.3 其界面设计与例5.4的表单相同,运算菜单项名为op数组,即op(1)对应的菜单项标题为“加法”,op(2)对应的菜单项标题为“减法”,op(3)对应的菜单项标题为“乘法”,标题为“加法”菜单项在操作中添加或删除。将窗体上的事件过程修改如下: 'Div为1时表示“除法”菜单可见,其初值默认为0 Dim Div As Integer Private Sub op_Click(Index As Integer) If Val(Text2.Text) <> 0 Then If Div = 0 Then Load op(4) op(4).Caption = "除法" op(4).Visible = True 342 Visual Basic程序设计导学 Div = 1 End If Else If Div = 1 Then Unload op(4) Div = 0 If Index = 4 Then Exit Sub End If End If End If Select Case Index Case 1 Text3.Text = Val(Text1.Text) + Val(Text2.Text) Case 2 Text3.Text = Val(Text1.Text) - Val(Text2.Text) Case 3 Text3.Text = Val(Text1.Text) * Val(Text2.Text) Case 4 Text3.Text = Val(Text1.Text) / Val(Text2.Text) End Select End Sub Private Sub Exit_Click() End End Sub 5.4 设计一个窗体,在其中放置一个文本框Text1,将其属性Multiline设置为True。启动菜单编辑器编辑一个菜单,其结构如下: oper(oper)<-设置为不可见的 ....复制(oper1) ....粘贴(oper2) 在该窗体上设计如下事件过程: Dim str As String Private Sub oper1_Click() str = Text1.SelText End Sub Private Sub oper2_Click() Str1 = Mid(Text1.Text, 1, Text1.SelStart) Str3 = Mid(Text1.Text, Text1.SelStart + 1, Len(Text1.Text)) Text1.Text = Str1 + str + Str3 End Sub Private Sub Text1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) If Button = 2 Then 附录B 习题参考答案343 PopupMenu oper, 2 End If End Sub 习题6 6.1 建立一个窗体,使用Shape控件先在窗体上绘制一个矩形,其属性为: BackStyle=0 BorderStyle=0 FillStyle=0 FillColor=&H000000FF& (白色) 然后建立一个椭圆,正好套在矩形上,其属性为: FillStyle=0 FillColor=&H00FFFFFF& (红色) 复制和粘贴该椭圆一次,将粘贴的椭圆正好套在矩形的下方,其属性为: BackStyle=0 BorderStyle=0 FillStyle=0 FillColor=&H00FFFFFF& (红色) 这样就绘制了本题要求的图形。 6.2 建立一个窗体,在该窗体上设计以下事件过程: Private Sub Form_Paint() For i = 1000 To 1 Step –1 Circle (1900, 700 + i), 1000, vbRed, , , 3 / 7 Next Me.FillStyle = 0 Me.FillColor = RGB(255, 255, 255) Circle (1900, 700), 1000, , , , 3 / 7 End Sub 6.3 建立一个窗体,在该窗体上设计以下事件过程: Private Sub Form_Load() Show x0 = 1500: y0 = 500 X1 = 2500: Y1 = 2000 X2 = 4000: Y2 = 3000 344 Visual Basic程序设计导学 x3 = 600: y3 = 3000 x4 = 400: y4 = 2000 DrawStyle = 0 DrawWidth = 2 Line (x0, y0)-(X2, Y2) Line -(x3, y3) Line -(x4, y4) Line -(x0, y0) Line -(x3, y3) DrawStyle = 2 DrawWidth = 1 Line (x0, y0)-(X1, Y1) Line -(X2, Y2) Line (X1, Y1)-(x4, y4) DrawStyle = 3 DrawWidth = 1 Line (x0, y0)-(x0, (Y1 + Y2) / 2) End Sub 6.4 建立一个窗体,在该窗体上设计以下事件过程: Const pi = 3.14159 Private Sub Form_Paint() For i = 300 To 1 Step –1 Circle (1900, 1000 + i), 1000, vbRed, -pi / 3, -pi / 6, 3 / 5 Next Me.FillStyle = 0 Me.FillColor = RGB(255, 255, 255) '设置白色 Circle (1900, 1000), 1000, , -pi / 3, -pi / 6, 3 / 5 End Sub 利用循环从上到下绘制一系列有缺口的以红色填充的椭圆,最上面的画成实心的、以白色填充的椭圆。 6.5 建立一个窗体,在该窗体上添加一个图片框Picture1和一个命令按钮Command1。Picture1的Appearance属性设置为0。在该窗体上设计以下事件过程: Const pi = 3.14159 Private Sub Command1_Click() Dim i As Single Picture1.ForeColor = vbRed Picture1.Scale (-2 * pi, 1)-(2 * pi, -1) '建立坐标系 Picture1.CurrentX = -2 * pi '设置当前坐标位置 Picture1.CurrentY = 0 For i = -2 * pi To 2 * pi Step 0.01 Picture1.Line -(i, Cos(3 * i) * Sin(5 * i)) '绘制曲线 Next End Sub 附录B 习题参考答案345 6.6 建立一个窗体,在该窗体上设计以下事件过程: Const pi = 3.14159 Private Sub Command1_Click() degree = InputBox("旋转的角度", "") If degree < 0 Or degree > 360 Then Exit Sub m = Pic1.ScaleWidth d = degre e * pi / 180 Pic1.Scale (-m / 2, m / 2)-(m / 2, -m / 2) Pic2.Scale (-m / 2, m / 2)-(m / 2, -m / 2) Pic1.CurrentX = 0 Pic1.CurrentY = 0 For i = -m / 2 To m / 2 For j = -m / 2 To m / 2 If Pic1.Point(i, j) = 0 Then x = i * Cos(d) - j * Sin(d) y = i * Sin(d) + j * Cos(d) Pic2.PSet (x, y) End If Next j Next i End Sub 习题7 7.1 随机文件和顺序文件读写过程的区别如下: (1)打开时的区别 顺序文件在打开时必须指定对文件的操作方式(Input、Output、Append),打开后只能对文件按指定的方式进行操作。每打开一次文件,只能进行单一的一种操作。 随机文件在打开时不必指定操作方式,打开后既可以进行读操作,又可以进行写操作。 (2)读文件的区别 顺序文件在以Input方式打开后,总是从文件的开头读文件,即使需要的是最后一行内容也必须如此。 随机文件只需指定记录号,即可直接读取该记录的内容。 (3)写文件的区别 顺序文件在以Output方式打开后,总是从文件的开头写。所以若是一个已经存在的文件,其中的原有内容将被覆盖而丢失。顺序文件在以Append方式打开后,则总是从文件的末尾开始写,无论前面的内容是否需要修改。 随机文件在写文件时,只对指定的某个记录进行操作,由此只是重写某个记录而不破坏其他内容。