VB注意事项.docx
- 文档编号:9138409
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:17
- 大小:24.47KB
VB注意事项.docx
《VB注意事项.docx》由会员分享,可在线阅读,更多相关《VB注意事项.docx(17页珍藏版)》请在冰豆网上搜索。
VB注意事项
VB复习注意事项
ftp:
//192.168.229.254
方法:
对象可以执行的一个动作,表现为函数或过程。
事件:
对象可以识别的动作。
对象是方法的施出者,是事件的承受者。
VB中几个文件:
工程文件(.VBP):
工程的类型、工程中有几个模块,叫什么,在哪儿……(注意:
用户代码,一句没有)
窗体文件(.FRM):
窗体与控件的属性设置,所有的事件过程,还有一些通用过程,变量定义……
标准模块(.BAS):
变量定义、通用过程
在一个窗体上放置一个对象,进行过若干设置后,运行窗体,发现对象不在窗体上,为什么?
关于Print
Print输出项[分隔符]
Print“A”;
Print“B”
Print“C”
Load与UnLoad是窗体专有的事件
List1.List(序号):
序号从0开始,最大到List1.ListCount-1
ListIndex:
列表项的序号,若为-1,则表示没有选中
List1.List(List1.ListIndex)结果相当于List1.Text
List1.AddItem项目[,序号]
List1.RemoveItem序号
List1.Clear
组合框的Style属性值为0或1时,可以触发Change事件
在Caption属性中,在某个字母前加&,如&F,则表现为F,使用时可以用Alt+F来访问
在菜单中插入分组线,用“-”
多窗体设计时,启动窗体为设计时第一个添加的窗体,可以通过工程属性来改变启动窗体。
事件过程名称构成:
一般对象:
对象名_事件名([参数])
窗体:
Form_事件名([参数])
典型的错误:
Text1.Printkkkk
Form1.Clear
List1.Cls
容器对象:
窗体、图片框、框架
最典型的应用:
用于对选项按钮的分组
可以显示图片的对象:
窗体、图片框、图像、按钮、选项按钮、复选框(后三个必须要将Style属性设置为Graphical)
有Caption属性:
窗体、标签、按钮、选项按钮、复选框、框架
属性窗口中并没有列出一个对象的所有属性。
四类属性:
●既能在设计时改变,又能在运行时改变(例如Text,Visible,Enabled等)
●只能在设计时改变(如Name,Index等)
●只能在运行时改变(如Drive,Path等)
●只读属性(如ListCount等)
前两种属性出现在属性窗口中,后两种则不出现。
几种对象的清空方法:
窗体和图片框:
[对象名.]Cls
列表框与组合框:
对象名.Clear
文本框:
对象名.Text=””
事件过程只能出现在窗体模块中。
数据类型:
字符串String:
有定长与变长之分。
数值数据:
●Integer整型,-32768~32767,两字节,补码表示
●Long长整,四字节,补码表示
●Single单精度,4字节
●Double双精度,8字节
●Byte字节型,1字节,0~255
●Currency货币,8字节
布尔型,Boolean,双字节,只有True和False两个值
日期型,Date,8字节
变体型,Variant
100!
表示100是一个单精度的数,而不是整数
%整型,&长整,!
单精度
#双精度,@货币,$字符串
整数有三种表示方法:
十进制,八进制(&O),十六进制(&H)
若一个整数在[-32768,32767]内,则系统认为是Integer类型,否则认为是Long类型;一个带小数的数,系统认为是Double类型。
变量种类
关键字
定义位置
作用域
生命期
引用方法
局部变量
Dim
过程中
所在过程
所在过程运行时间
所在过程直接使用
模块变量
Dim
Private
模块的通用声明处
所在模块
模块运行时间
模块内各过程直接使用
全局变量
Public
模块的通用声明处
应用程序
应用程序运行时间
[模块名.]变量名
静态变量
Static
过程中
所在过程
应用程序运行时间
所在过程直接使用
(20090412)
+号运算符只有两边的数据都为字符串才是连接,与&功能相同。
&运算符不管前后数据为何类型,总是将两个数据进行连接,结果是字符串。
非整数向整数转换时的规则——“四舍六入五成双”:
若一个数的小数部分大于0.5,则向上进;若小于0.5则舍掉;若等于0.5则要保证结果为偶数。
^与/运算结果为Double类型;
\与Mod要求参与运算的数必须为整数,若不为整数,则按“四舍六入五成双”原则转换成整数,同时结果为整型(Integer或Long或Byte);
+、-、*运算结果:
若运算的两个数类型相同,则结果类型也与其相同,否则,结果类型为在内存中存储长度较长的那种类型。
(Integer*IntegerInteger,Integer*LongLong,Integer*SingleSingle,Single*LongDouble等等)
赋值总是——左值=右值(数据类型的相容):
左为字符串时,右可以为任何数据;
左为数值,右可以为数值、数字字符、布尔值(True-1,False0)、日期时间(日期整数部分,时间小数部分);
左为Boolean,右可以为数值、数字字符(非0True,0False)。
赋值符=,比较符=
要注意题目的描述到底是表达式还是语句,在表达式中只有比较运算,不可以是赋值;在语句中,只有最左边的一个=是赋值号,其余均为比较符。
窗体通用声明处不能定义全局(Public)的常量、全局定长字符串与全局数组。
在窗体通用声明处不可以出现函数运算,只能是基本的运算。
也就是说下面的语句均为错误语句:
PublicConstCityAsString=”苏州”
PublicSAsString*5
PublicA(10)AsInteger
ConstXAsInteger=Int(5.4)
InputBox函数与Text属性的类型是字符串。
Int()(下取整)与Fix()(取整数部分)两个函数不能改变结果类型;而CInt会将结果转换为整型。
Left、Right与Mid三个函数一般是对字符串运算,若运算对象为数,则默认情况下相当于在此数上先加上一个CStr函数转换为字符串后再运算。
Len函数:
功能是返回一个字符串中有多少个字符的(长度)。
若参数不是字符串,则返回的是此种类型在内存中的存储字节数。
(Integer2,Single4,Double8……)
对于定长字符串而言,长度在定义时就已确定,与实际赋值无关。
若超长则截掉,若不够则补空格。
Str将正数转换为字符串时,在最左边保留一个空格作为符号位;而CStr函数将正数转换为字符串时,不保留符号位。
注意三角函数的参数应该为弧度,lnxLog(x),eExp(),
3.14
单行的If语句是不需要加EndIf的。
多行的If语句是必须要加EndIf的。
多分支的If语句中,ElseIf不能写成ElseIf。
SelectCase语句中的匹配表达式(也就是Case后的条件)可以有三种形式:
1.枚举值:
如Case1,3,5,7,8,10,12
2.一个区间:
如Case10To20,Case”A”To“Z”
3.用Is表达的普通条件:
如CaseIs>100
上述三种形式可以出现在一个Case中。
如Case1,3,5,20To30,Is<-50
在For循环中,若循环变量的值在初值与终值的闭区间内,则要循环,否则结束循环。
若有ForI=AToBStepC,其中I是循环变量,A、B、C均为变量,则A、B、C在循环体中的变化是不会影响循环次数的。
For循环中循环变量、初值、终值以及步长应该为整数。
For循环中循环变量的变化是隐藏的。
Do循环分当型(DoWhile)与直到型(DoUntil)两种,每一种又有两种形式:
先循环后判断与先判断后循环。
当型循环是条件成立时执行循环,直到型循环是条件成立时结束循环。
结构的嵌套要求,一个结构把另一个结构完全包围,不能出现交叉。
ExitFor是退出当前一层For循环,与Do循环无关;ExitDo是退出当前一层Do循环,与For循环无关。
(20090419)
VB中一个数组的所有元素的数据类型都是相同的。
一个数组元素可以当作普通变量来使用。
声明数组的时候,如果不指定下标下界,默认为0,若有通用声明处有OptionBase1语句则默认为1。
(有自己的以自己的为准,自己没有,才由OptionBase语句决定)
声明固定数组时,下标只能用常量或常量表达式,且只能为整数,不可以是变量。
Array函数可以将一个变体类型的变量转换为一个一维数组。
动态数组在开始声明时不需要指定维数与维界(如DimA()AsInteger),在使用时需要用ReDim对数组的维数与维界进行说明,且可以多次更改说明。
在重定义数组时,若没有Preserve时,重定义后,数组中原有内容全部清空(即为初始化——把内容变为该数据类型的默认值);若要保留原有内容,则必须加Preserve子句。
有Preserve后,数组的维数便不能被更改;只有最后一个维界可以改变。
特别注意:
重定义数组时,绝对不能改变数组的类型。
Erase语句的功能:
复位固定数组(清空所有元素内容,变成默认值);释放动态数组空间。
对于固定数组,在Erase之后可以直接使用,对于动态数组,在Erase之后必须要用ReDim重定义。
ReDim语句不能出现在窗体通用声明处;窗体通用声明处不能定义全局的数组。
二维数组的输出方法:
窗体上、图片框、多行文本框:
DimA(4,5)AsInteger
DimiAsInteger,jAsInteger
Randomize
Fori=1To4'控制的是行号
Forj=1To5'控制是列号
A(i,j)=Int(90*Rnd)+10
PrintA(i,j);'窗体输出,不换行
Picture1.PrintA(i,j);'图片框输出,不换行
Text1=Text1&Str(A(i,j))'文本框输出,不换行
Next
'内循环结束后要换行
Picture1.Print
Text1=Text1&vbCrLf
Next
事件过程只能出现在窗体中,不能出现标准模块中。
[Public|Private|Static]Sub过程名(形参列表)
过程体(可以有ExitSub语句)
EndSub
[Public|Private]Function函数名(形参列表)[As类型]
函数体(可以有ExitFunction语句)
[函数名=表达式]
EndFunction
函数与过程最大区别在于函数可以返回一个值,而过程不能。
在Sub中不能再嵌套定义Sub或Function,同样,在Function中也不能嵌套定义Sub或Function。
在定义Sub时,末尾是不能加“As类型”的,因为Sub不能返回值。
在定义Function时末尾可以不加“As类型”,表示返回结果为变体型。
Function完全包含了Sub的功能。
调用Sub:
Call过程名(实参列表)
过程名实参列表
调用Function:
(1)变量=函数名(实参列表)
(2)
a)Call函数名(实参列表)
b)函数名实参列表
过程调用结束后,返回到主调用过程的逻辑上下一个要被执行的语句上。
形参不能与过程(函数)名同名。
如:
Subf1(f1AsInteger)是错误的。
形参不可以是定长字符串。
如:
Subsub1(SAsString*2)是错误的。
形参在过程内不能再用Dim语句定义,否则会出现重复声明的错误。
参数传递时,若为按值传递,则要求形参与实参类型相容;若为按地址传递,则要求形参与实参的类型完全相同。
表达式、常量只能按值传递,数组只能按地址传递。
在一个实参变量外加括号可以使得此变量按值传递。
实参传地址给形参后,形参的改变会实时地影响实参。
数组在参数传递时:
作为形参,只需要给出数组名与括号,不能给出维界;在数组名前不能加ByVal。
作为实参时,只需要给出数组名。
数组不能传递给普通变量,反之亦然。
形参是数组,则实参必须是数组;形参是普通变量,则实参可以是普通变量,也可以是数组元素。
若形参是定长字符串数组,则实参也只能是定长字符串数组;若形参是变长字符串数组,则实参也只能是变长字符串数组。
(定长时长度可不同)
(20090426)
形参是数组时,实参既可以是固定数组,也可以动态数组。
若实参传递的是动态数组,则形参可以用ReDim重定义。
实参
形参
变量
变量
数组元素
数组
数组
定长字符串数组
字长字符串数组
变长字符串数组
变长字符串数组
在某个窗体中定义了全局变量与全局过程,在其他模块中引用时,必须要加上窗体名,如:
Form1.Sub1…
静态变量在所定义的过程执行结束后,值仍然保留,在过程下次再执行时可以继续使用。
改变驱动器列表框的ListIndex属性会改变它的Drive属性值,同时触发它的Change事件。
而对于文件夹列表框,改变ListIndex属性不会改变它的Path属性值,因此就不会触发它的Change事件。
实现驱动器列表框与文件夹列表框联动的语句:
在驱动器列表框的Change事件过程中写入如下代码:
Dir1.Path=Drive1.Drive
VB中文件的类型有:
顺序文件、随机文件、二进制文件。
要对文件进行操作,第一步是打开文件,用Open命令。
Open文件路径For模式As#文件号[Len=记录长度]
模式有:
●Input:
只读方式打开顺序文件
●Output:
覆盖方式打开顺序文件
●Append:
添加方式打开顺序文件
●Random
●Binary
缺省For子句,则按Random方式打开。
可以使用Input方式同时以不同的文件号打开一个相同的顺序文件。
使用Output方式时,在正确打开文件后,文件的内容就被清空。
可以使用Binary方式打开任何一种类型的文件。
文件号的范围1~511。
顺序文件的读:
Input、LineInput与Input函数
顺序文件的写:
Print、Write
随机文件与二进制文件的读用Get,写用Put。
关闭文件用Close和Reset。
在一个过程中打开了文件,在其他过程中均可以使用该文件。
在打开文件时,若使用了Lock语句锁定记录,则在关闭文件时,必须要使用Unlock来解锁。
常用算法
'选择法排序(升序)
PrivateSubXuanzepaixu(A()AsInteger)
DimIAsInteger,TAsInteger,JAsInteger
ForI=1To9
ForJ=I+1To10
IfA(I)>A(J)Then
T=A(I)
A(I)=A(J)
A(J)=T
EndIf
Next
Next
EndSub
'冒泡法排序
PrivateSubMaopaopaixu(A()AsInteger)
DimIAsInteger,JAsInteger,TAsInteger
ForI=1To9
ForJ=1To10-I
IfA(J)>A(J+1)Then
T=A(J)
A(J)=A(J+1)
A(J+1)=T
EndIf
Next
Next
EndSub
PrivateSubHebingpaixu(A()AsInteger,B()AsInteger,C()AsInteger)
'合并排序,将两个有序集合,合并后形成的集合仍然有序
'数组下标下界均从1开始
DimUAAsInteger,UBAsInteger,UCAsInteger
DimIAsInteger,JAsInteger,KAsInteger
UA=UBound(A):
UB=UBound(B)
ReDimC(UA+UB)
I=1:
J=1:
K=1
DoWhileI<=UAAndJ<=UB
IfA(I)
C(K)=A(I)
I=I+1
Else
C(K)=B(J)
J=J+1
EndIf
K=K+1
Loop
DoWhileI<=UA
C(K)=A(I)
I=I+1
K=K+1
Loop
DoWhileJ<=UB
C(K)=B(J)
J=J+1
K=K+1
Loop
EndSub
升序数:
PrivateFunctionShengxushu(NAsInteger)AsBoolean
'判断N是否是升序数,若是则返回True
DimSAsInteger,IAsInteger
S=CStr(N)
ForI=1ToLen(S)-1
IfMid(S,I,1) Next Shengxushu=True EndFunction 降序数: PrivateFunctionJiangxushu(NAsInteger)AsBoolean '判断N是否是降序数,若是则返回True DimSAsInteger,IAsInteger S=CStr(N) ForI=1ToLen(S)-1 IfMid(S,I,1)>Mid(S,I+1,1)ThenExitFunction Next Jiangxushu=True EndFunction 找最大值: PrivateFunctionMax(A()AsInteger)AsInteger DimlbAsInteger,ubAsInteger,IAsInteger lb=LBound(A) ub=UBound(A) Max=A(lb) ForI=lb+1Toub
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VB 注意事项