例如,要通过文本框输入若干个值,每输入一个按Eeter键,直到输入的值为9999,输入结束,求输入的数的平均值 。
Private Sub Textl_Key Press(Key Ascii As Integer)
Dim sum!,n%
If KeyAscii=13 Then
If Val(Text1)=9999 Then
sum=sum/n
Print sum
Else
Sum=sum+Text1
n=n+1
Text1=""
End If
End If
End Sub
该过程没有语法错,运行程序可输入若干个数,但当输入9999时,程序显示"溢出"的错误 。原因sum和n是局部变量,每按一个键,局部变量初始化为0,所以会有上述错误产生 。
改进 *** :将要保值的局部变量声明为Static静态变量或声明为窗体级变量 。也可将要保值的变量在通用声明段进行声明为窗体级变量 。
6.递归调用出现"栈溢出"
如下求阶乘的递归函数过程:
Public Functionfac(n As Integer)As integer
If n=1 Then
fac=1
Else
fac=n*fac(n-1)
End If
End Function
Private Sub Commandl_Click()'调用递归函数,显示出fac(5)=120
Print "fac(5)";fac(5)
End Sub
当主调程序调用时,n的值为5时,显示120结果;当n的值为-5时,显示"溢出堆栈空间"的出错信息 。
实际上每递归调用一次,系统将当前状态信息(形参、局部变量、调用结束时的返回地址)压栈,直到到达递归结束条件 。上例当n=5时,每递归调用一次,参数n-l,直到n=l递归调用结束,然后不断从栈中弹出当前参数,直到栈空 。而当n=-5时,参数n-1为-6、压栈,再递归调用、n-1永远到不了n=l的终止条件,直到栈满,产生栈溢出的出错信息 。
所以设计递归过程时,一定要考虑过程中有终止的条件和终止时的值或某种操作,而且每递归调用一次,其中的参数要向终止方向收敛,否则就会产生栈溢出 。
六、常用控件常见错误和难点分析
1.遗漏对象名称
在VB程序设计时,初学者常犯的一个错误是遗漏对象名称,特别是在使用列表框时 。例如,如果要引用列表框(List1)中当前选定的项目,Listl.list(Listlndex)是错误的 。即使当前焦点在Listl上,VB也不是认为Listlndex是List l的属性,而是一个变量 。所以正确的引用方式是:Listl. 1ist(Listl.Listlndex) 。
2.列表框的Columns属性
列表框的Columns属性决定列表框是水平还是垂直滚动以及如何显示列中的项目 。如果水平滚动,则Columns属性决定显示多少列,如表2.7.2所示 。图2.7.1是一个水平滚动两列显示的列表框 。
在程序运行期间,该属性是只读的,也就是说,不能在运行时,将多列列表框变为单列列表框或将单列列表框变为多列列表框 。
表2.7.2列表框的Columns属性
列数属性
0(默认值)1到n项目安排在一列中,且列表框竖直滚动项目安排在多个列中,先填第一列,再填第二列……列表框水平滚动并显示指定数目的列
3.域级验证
域级验证是指输入到某独立域的数据的验证,在域级验证的过程中一般不考虑窗体一般其他域的内容 。进行域级验证的合适时间是:
(1)当往某域中输入某个键时,此时涉及键盘事件(KeyDown、KeyUp和KeyPress) 。
(2)当用户企图离开某域时,此时涉及CansesValidate属性和Validate事件 。
(3)当某域的内容发生变化时,此时涉及Change事件 。
CausesValidation属性和Validate事件通常是协同工作的 。
CausesValidate属性决定Validate事件是否发生 。如果控件的CausesValidate属性为False,该控件的Validate事件永远不会发生 。如果控件的CausesValidate属性为Tree,当焦点企图移到(还没有离开,也可以说离开之前)另一个CausesValidate属性为True的控件时,原控件的Validate事件发生:当焦点企图移到另一个CausesValidate属性为False的控件时,原控件的Validate事件暂时不发生,什么时候发生?直到焦点移到一个CausesValidate属性为True的控件上时才发生 。
推荐阅读
- 人生得意须尽欢莫使金樽空对月什么意思?人生得意须尽欢莫使金樽空对月下联
- 新疆高考招生网,新疆高考招生网上报名2023
- 少女妈妈贵州 海南少女妈妈村在哪里
- 杨梅放冰箱可以放多久
- 异地办理房产委托公证需要什么材料 购房委托公证需要什么材料
- 薄冰英语语法手册 薄冰英语语法怎么样
- 生命的本质是什么?生命的本质是
- 造价员取消了章还能用吗 造价员取消了吗
- 金陵科技学院怎么样?