分享
 
 
 

VB编程中的一些经验

王朝vb·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

VB编程中的一些经验

1. 假设VB中有如下的变量声明:

dim s1, s2 as string

则s1是一个variant型变量,而s2是一个string型变量

如果想要声明两个string变量s1和s2

应该用:

dim s1 as string, s2 as string

2. VB中的对象是自动回收的,类似java

在一个过程中

sub Foo()

dim obj as new Object

.... 'do something with obj

end sub

过程结束的时候没有必要 set obj = nothing

因为当离开该过程的时候,局部变量obj消失,因此对Object对象实例的引用也就消失(除非在过程内部有其他的全局变量引用了该对象的实例),所以对象实例会自动释放

但是对于模块级的对象变量,new了一个实例后用完了必须set obj = nothing来释放该实例

3. 对对象变量赋值应该用 set obj = AnOtherObj 这种方式,相当于让obj指向AnOtherObj所指向的对象。VB中的对象变量实质上是一个指向对象实例的指针,这点和java,pascal相同,和C++中不同

4. VB中字符串的内部存储格式是Unicode,它可以自动转化为ANSI字符(单字节字符)或者 DBCS 字符(双字节字符)。例如

dim s1 as string, s2 as string

s1 = "中文"

s2 = left(s1, 1)

则得到的实际上是 s2 = "中"

因为VB会自动将s1内部unicode的"中"字单作一个DBCS字符取出来传给s2

因此处理双字节字符的时候特别要注意,很容易产生数组溢出错误

VB中的常用字符串处理函数,例如Asc, Left, Mid...都会自动判断处理的字符串中的每个字符是单字节还是双字节(因为字符串在内部以Unicode存储,所以这一点很容易做到),然后自动转化为ANSI字符或DBCS字符。

5. 字符串的比较应该是用 strCmp 函数,而不是简单的用 = 号

StrComp(string1, string2[, compare])

其中参数compare的取值含义如下:

常量 值 含义

vbUseCompareOption -1 根据Option Compare 语句的设定进行字符串比较

vbBinaryCompare 0 进行二进制比较,也就是将string1和string2中的unicode字符看作数组进行字典序比较

vbTextCompare 1 进行文本比较

vbDatabaseCompare 2 这个选项只适用于Microsoft Access,根据数据库的设定进行比较

对于英文字符串进行 vbTextCompare 比较时,不区分字母大小写,例如: "a" 与 "A" 相等;

对于中文或其他双字节字符串进行 vbTextCompare 比较时,不区分全角字符和半角字符,例如 "A", "A", "a", "a" 都相等;

6. VB中字符串处理的函数有三种版本:

(1) ANSI和DBCS版本,一般的字符串函数(例如Mid(), Left(), ... )都是该版本,该版本的函数可以自动识别ANSI字符和DBCS字符,而且无论是ANSI字符还是DBCS字符都当作一个字符处理(虽然一个DBCS字符是两个字节,但还是当作一个字符处理)

(2) 二进制版本,这个版本的函数是在第一类函数的名称后面加上B, 例如 MidB(), LeftB()……;这个版本的函数将字符串当作字节数组处理,例如 s = "abc", k = LenB(s) , 则 k=6,因为字符串在VB内部以unicode存储,而一个unicode字符占两个字节,所以s实际上占用了2*3=6个字节的空间,于是LenB(s)返回6

(3) Unicode版本,这个版本的函数是在第一类函数名称后面加上W,例如AscW, ChrW;这个版本的函数将字符串当作unicode处理。

函数 功能描述

Asc Returns the ANSI or DBCS character code for the first character of a string.

AscB Returns the value of the first byte in the given string containing binary data.

AscW Returns the Unicode character code for the first character of a string.

Chr Returns a string containing a specific ANSI or DBCS character code.

ChrB Returns a binary string containing a specific byte.

ChrW Returns a string containing a specific Unicode character code.

Input Returns a specified number of ANSI or DBCS characters from a file.

InputB Returns a specified number of bytes from a file.

InStr Returns the first occurrence of one string within another.

InStrB Returns the first occurrence of a byte in a binary string.

Left,Right Returns a specified number of characters from the right or left sides of a string.

LeftB, RightB Returns a specified number of bytes from the left or right side of a binary string.

Len Returns the length of the string in number of characters.

LenB Returns the length of the string in number of bytes.

Mid Returns a specified number of characters from a string.

MidB Returns the specified number of bytes from a binary string.

7. VB程序代码中的以下标识符不能含有双字节字符:

Public procedure names 公共过程名称

Public variables 公共变量

Public constants 公共常量

Project name (as specified in the Project Properties dialog box) 工程名称(在工程属性对话框中的名字) [PS: VB中文版中的工程名称可以是中文,比较奇怪的说]

Class names (Name property of a class module, a user control, a property page, or a user document) 类名(类模块、用户控件模块,属性页,用户文档的name属性)

换句话说,其他的标识符都可以用中文,例如:

Private Sub cmdTest_Click()

Dim 中文变量 As String

中文变量 = "你好! hello!"

MsgBox 中文变量

End Sub

这样的代码也是合法的 :-)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有