vb编程实例讲解、告诉我一些简单的vb编程代码?( 四 )
(1)在定义形式上前者在形参前加即ByVal关键字 。
(2)在作用上值传递只能从外界向过程传入初值,但不能将结果传出,而地址传递既可传入又可传出 。
(3)如果实参是数组、自定义类型、对象变量等,形参只能是地址传递 。
4.实参与形参类型对应问题
在地址传递方式时,调用过程实参与形参类型要一致 。例如:
函数过程定义如下:
Public Function f!(x!)
f=x+x
End Function
主调程序如下:
Privme Sub Commandl_Click()
Dim y%
y=3
Print f(y)
End Sub
上例形参x是单精度型、实参y是整型,程序运行时会显示"ByRef参数类型不符"的编译出错信息 。
在值传递时,若是数值型,则实参按形参的类型将值传递给形参 。例如:
函数过程定义如下:
Public Function f!(ByVal x%)
f=x+x
End Function
主调程序如下:
Priva~SubCommandI_Click()
Dim y!
Y=3.4
Print f(y)
End Sub
程序运行后显示的结果是6 。
5.变量的作用域问题
局部变量,在对该过程调用时,分配该变量的存储空间,当过程调用结束,回收分配的存储空间,也就是调用一次,初始化一次,变量不保值,窗体级变量,当窗体装入,分配该变量的存储空间,直到该窗体从内存卸掉,才回收该变量分配的存储空间 。
例如,要通过文本框输入若干个值,每输入一个按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事件 。
推荐阅读
- 西门子编程软件怎么下载安装 s7 200编程软件
- 电子入门基础知识讲解 电子元件基础知识
- 福州邓拓故居讲解 邓拓故居
- 装修房子风水讲究讲解 房屋装修风水学
- 慢走丝编程培训 慢走丝机床
- 英语反义疑问句的用法讲解 反意疑问句
- 从下往上编织儿童套头毛衣 儿童毛衣编织实例
- 宾语从句全方位掌握 英语宾语从句讲解
- ap100编程教程视频!ap100破解版怎么注册
- 六十四卦详解,喜欢易经的朋友, 易经讲解
