从下 * * 道试题(试题5至试题7)中任选1道解答。如果解答的试题数超过1道,则题号小的1道解答有效。
阅读以下应用说明和Visual Basic程序,根据要求回答问题1问题2。
【说明】
某机动车驾驶员模拟考试系统的“交通禁令标志识别”窗体中,共有1个按钮(CmdTest)、6个标签、 1个包含10个单选按钮的控件数组(OptPicture),如图2-15所示。其中,标签(LblPrompt1)“禁令标志”与标签(LblTest)相对应,标签(LblPrompt2)“图片答案”与标签(LblAnswer)相对应,标签(LblEvaluate)为结果提示。
窗体(Frm001)对象和单选按钮控件数组(OptPicture)对象的部分属性及属性值如表2-15所示。
表2-15 窗体、单选按钮控件数组的部分属性及属性值
对 象 | 属 性 | 属性值 |
窗体 | (名称) | Frm001 |
Icon | 变通标识 | |
MaxButton | (1) | |
MinButton | (2) | |
单选按钮 控件数组 | (名称) | optPicture |
Index | (3) | |
Style | 1-Graghics | |
Picture | (装入相应图片) |
【Visual Basic 程序】
Dim (4) As String
Private Sub cmdTest_Click()
Dim i As Integer
For i = 0 To 9
(5)
Next i
lblPrompt2.Visible = False
lblAnswer.Visible = False
lblEvaluate.Visible = False
i = Int(Rnd * 10)
lblTest.Caption = tname(i)
End Sub
Private Sub Form_Load()
Dim i As Integer
For i = 0 To 9
optPicture(i).Value = False
(6)
lblPrompt2.Visible = False
lblAnswer.Visible = False
lblEvaluate.Visible = False
tname(0) = "禁止向左向右转弯"
tname(1) = "禁止直行和向右转弯道"
tname(2) = "禁止直行和向左转弯"
tname(3) = "禁止驶入"
tname(4) = "禁止掉头"
tname(5) = "禁止车辆长时停放"
tname(6) = "禁止机动车通行"
tname(7) = "禁止非机动车通行"
tname(8) = "禁止超车"
tname(9) = "禁止车辆临时或长时停放"
End Sub
Private Sub optPicture_Click(Index As Integer)
lblPrompt2.Visible = True
lblAnswer.Visible = (7)
lblEvaluate.Visible = True
lblAnswer. Caption= (8)
If (9) Then
lblEvaluate.ForeColor = vbRed
lblEvaluate.Caption = " 恭喜你!回答正确!"
Else
lblEvaluate.ForeColor = vbBlue
lblEvaluate.Caption= "很遗憾,回答错误。"
End If
End Sub
【问题2】 请根据【说明】和图2-15和图2-16的显示效果,将【Visual Basic程序】中(4)~(9)空缺处的程序语句填写完整。 |
参考答案:
解析:(4)tname(9) (5)optPicture(i).Value=False (6)Next i或其他等价语句 (7)True (8)tname(Index) (9)lblAnswer.Caption=lblTest.Caption或其他等价语句[要点解析] 语句“Dim。 (4) As String”用于定义窗体级字符型数组。可根据图2-15(或图2-16)中交通禁令标志图的个数,以及“tname(0)="禁止向左向右转弯"、tname(1)="禁止直行和向右转弯道"…… tname(9)="禁止车辆临时或长时停放"”等信息来定义数组的大小,即(4)空缺处的所填写的内容是“tname(9)”。 【Visual Basic程序】中,Form_Load()是窗体的装载事件过程程序,cmdTest_Click()是【测试】按钮的单击事件过程程序,optPicture_Click()是单击单选按钮控件数组元素的代码。 在Visual Basic中,For循环语句遵循的语法格式如下。 For <循环变量>=<初值> TO <终值> [Step步长] <循环体> [Exit For] Next <循环变量> 当循环变量的值在初值到终值范围内时,执行一次循环体中的语句块,并使初值增加一个步长。当循环变量的值不在初值到终值范围内时,就退出循环,执行Next后面的语句。其中,For语句也称为循环说明语句,用来指定循环变量的名称,以及循环变量的初值、终值和步长;循环体是被反复执行的部分(即循环工作部分),它可以由若干条语句所组成。 Next是循环终端语句,其作用是改变循环变量的值(即增加一个步长)并控制是否再次执行循环体。在Next后面的循习;变量与For语句中的循环变量必须相同。当只有一层循环时,Next后面的循环变量可以省略。因此,在窗体装载事件Form_Load()中,由语句“Fori=0 To 9”可知,(6)空缺处所填写的语句是“Next i”或其他等价语句。 由控件数组的基本概念可知,单选按钮控件数组(optPicture)通过Index属性区分各个控件,即 optPicture(0)、optPicture(1)、…optPicture(9)。参照窗体装载事件Form_Load()中,各单选按钮控件变量的赋值语句“optPicture(i).Value=False”。在【测试】按钮中单击事件cmdTest_Click(),各单选按钮控件变量的值也应为“False”,即(5)空缺处的所填写的语句是“optPicture(i).Value=False”。 在窗体中装载事件Form Load()和【测试】按钮的单击事件cmdTest_Click()中,“lblAnswer.Visible”的属性值均为“False”,即在窗体装载事件和单击【测试】按钮时,控件数组单选按钮的值不显示。而在单击控件数组中某个单选按钮后,将触发optPicture_Click()事件。在optPicture_Click()事件中,语句“lblPrompt2.Visible=True”将使图2-15(或图2-16)中显示出“图片答案:”等结果提示信息,语句“lblEvaluate.Visible=True”将使图2-15(或图2-16)中显示出“恭喜你!回答正确!”或“很遗憾,回答错误。”等结果提示信息。 根据图2-15或图2-16的显示结果可知,“lblAnswer.Visible”的属性值应设置为“Tree”,使得单击控件数组中某个单选按钮后,该单选按钮的值显示出来,即(7)空缺处的属性值均为“True”。而该单选按钮的值可以通过tname(1ndex)获取,因此“lblAnswer.Caption”的属性值应设置为“tname(Index)”,即(8)空缺处的所填写的内容是“tname(Index)”。其中,“Index”也可由“optPicture_Click(Index As Integer)”中得到启发。 (9)空缺处所在的“IF Then...ELSE...END IF”语句,通过判断系统随机给出的“禁令标志”值与用户所单击的那个单选按钮的值是否相同这一条件,从而为“lblEvaluate.Caption”和“lblEvaluate.Fore Color”赋予不同的属性值。根据(8)空缺处推理可得语句“lblAnswer.Caption=tname(Index)”,以及【测d试】按钮单击事件cmdTest_Click()中的语句“lblTest.Caption=tname(i)”可知,(9)空缺处的判断条件是“lblAnswer.Caption=lblTest.Caption”或其他等价语句。Rnd是由计算机产生的均匀分布在(0,1)区间内的伪随机数。每调用一次Rnd就会产生一个新的随机数。在cmdTest_Click()事件中,语句“i=Int(Rnd *10)”用于随机生成一个0~9之间的整数。 另外说明一点,本案例的实践操作步骤如下。 1)设计用户界面。其中,添加控件数组的方法是:先画出第1个控件,设置其属性:然后通过复制的方法画第2~9个控件,并设置相同的名称属性。 2)定义窗体级字符型数组,即Dim tname(9)As String。 3)编写窗体的装载事件Form_Load()的过程代码。 4)编写【测试】按钮的单击事件cmdTest_Click()的过程代码。 5)编写单击单选按钮控件数组元素optPicture_Click(Index As Integer)的过程代码。