1、隐藏 form1: form1.hide 显示 form1: form1.show - 退出程序时,弹出窗口提示是否要退出: Private Sub Form_Unload(Cancel As Integer) Dim iAnswer As Integer iAnswer = MsgBox(“真要退出吗?“, vbYesNo) If iAnswer = vbNo Then Cancel = True Else End End If End Sub - 只能用任务管理器关闭程序的代码: Private Sub From_Unload(Cancel As Integer) Cancel = tru
2、e End Sub - 点击 command1 打开 33IQ 网: Dim strURL Private Sub Command1_Click() strURL = “http:/“ Shell “explorer.exe “ winter;spring;summer;fall;“, “;“ “) Then it is a seasons nameEnd If有时候,甚至可以使用 InStr 来替代 SelectCase 代码段,但一定要注意参数中的字符数目。下面的例子中,转换数字 0 到 9 的相应英文名称为阿拉伯数字: 1、普通的方法:Select Case LCase$(word)Ca
3、se “zero“result = 0Case “one“result = 1Case “two“result = 2Case “three“result = 3Case “four“result = 4Case “five“result = 5Case “six“result = 6Case “seven“result = 7Case “eight“result = 8Case “nine“result = 9End Select2、更加简练的方法:result = InStr(“;zero;one;two;three;four;five;six;seven;eight;nine;“, _“
4、;“ “) 6精用 Boolean 表达式,让代码再减肥当设置基于表达式结果的 Boolean 型数值时,要避免使用多余的 If/Then/Else 语句结果。比如:If SomeVar SomeOtherVar ThenBoolVal = TrueElseBoolVal = FalseEnd If上面这段代码就很烦琐,它们完全可以使用下面的一行代码来替代:BoolVal = (SomeVar SomeOtherVar)括号不是必须的,但可以增加可读性。根据表达式中的操作数不同,后者比前者执行起来大约快 50%到 85%。后者中的括号对速度没有影响。有时,使用这个技术实现代码的简练并非很明显。
5、关键是要牢记:所有的比较操作结果或者是 0(false),或者是1 (True )。所以,下面例子中的 2 段代码是完全相同的,但是第 2 段要运行得快些:1、传统方法: If SomeVar SomeOtherVar Thenx = x + 1End If2、更简练的方法x = x - (SomeVar SomeOtherVar)函数名巧做局部变量很多程序员都没有认识到“在函数本身中使用函数名 ”的妙处,这就象对待一个局部变量一样。应用这个技巧可以起到临时变量的作用,有时还能加速程序运行。看看下面的代码:Function Max(arr() As Long) As LongDim res A
6、s Long, i As Longres = arr(LBound(arr)For i = LBound(arr) + 1 To UBound(arr)If arr(i) res Then res = arr(i)NextMax = resEnd Function去掉 res 变量,使用函数名称本身这个局部变量,可以使程序更加简练:Function Max(arr() As Long) As LongDim i As LongMax = arr(LBound(arr)For i = LBound(arr) + 1 To UBound(arr)If arr(i) Max Then Max = a
7、rr(i)NextEnd Function火眼识破隐藏的 Variant 变量如果没有用 As 语句声明变量,默认类型就是 Variants,比如:Dim name this is a variant或者,当前模块下没有声明 Option Explicit 语句时,任何变量都是 Variants 类型。许多开发者,特别是那些先前是 C 程序员的人,都会深信下面的语句将声明 2 个Interger 类型变量:Dim x, y As Integer而实际上,x 被声明为了 variant 类型。由于 variant 类型变量要比 Integer 类型慢很多,所以要特别注意这种情况。正确的一行声明方
8、法是:Dim x As Integer, y As IntegerGoSub 在编译程序中速度变慢编译为本地代码的 VB 应用程序中,如果使用 GoSubs 命令,就会比通常的 Subs 或者 Function 调用慢 5-6 倍;相反,如果是 p-code 模式,就会相当快。减少 DoEvents 语句的数量不要在代码中放置不必要的 DoEvents 语句,尤其是在时间要求高的循环中。遵循这个原则,至少能在循环中的每 N 次反复时才执行 DoEvents 语句,从而增强效率。比如使用下面的语句:If (loopNdx Mod 10) = 0 Then DoEvents如果只是使用 DoEve
9、nts 来屏蔽鼠标以及键盘操作,那么就可以在事件队列中存在待处理项目时调用它。通过 API 函数 GetInputState 来检查这个条件的发生:Declare Function GetInputState Lib “user32“ Alias “GetInputState“ () As Long .If GetInputState() Then DoEvents为常量定义合适的类型VB 在内部使用最简单、最可能的数据类型保存符号数值,这意味着最通常的数字类型比如 0 或者 1都按照 Integer 类型存储。如果在浮点表达式中使用这些常量,可以通过常量的合适类型来加速程序运行,就象下面的代
10、码: value# = value# + 1#.这个语句强迫编译器按照 Double 格式存储常量,这样就省却了运行时的隐含转换工作。还有另外的一种处理方法就是:在常量声明时就进行相应类型的定义,代码如下:Const ONE As Double = 1And、Or 和 Xor:让我们来优化表达式要检测一个整数值的最高有效位是否有数值,通常要使用如下的代码(有二种情况:第一组 If 判断表明对 Integer 类型,第二组对 Long 类型):If intvalue And resDebug.Print “bmp.bmBits “; bmp.bmBitsDebug.Print “bmp.bmBi
11、tsPixel “; bmp.bmBitsPixel 每相素位数Debug.Print “bmp.bmHeight “; bmp.bmHeight 以相素计算图象高度Debug.Print “bmp.bmPlanes “; bmp.bmPlanesDebug.Print “bmp.bmType “; bmp.bmTypeDebug.Print “bmp.bmWidth “; bmp.bmWidth 以相素计算图形宽度Debug.Print “bmp.bmWidthBytes “; bmp.bmWidthBytes 以字节计算的每扫描线长度End Sub-获得驱动器的卷标在 FORM 中添加一个
12、 CommandButton 控件 , 再加入一下一段代码 :Private Declare Function GetVolumeInFORMation Lib “kernel32“ Alias “GetVolumeInFORMationA“ (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFl
13、ags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As LongConst FILE_VOLUME_IS_COMPRESSED = &H8000Public Sub GetVolInfo(ByVal path As String)Dim aa As LongDim VolName As StringDim fsysName As StringDim VolSeri As Long, compress As LongDim Sysflag As Long, Maxlen
14、As Long初试化字符串的长度VolName = String(255, 0)fsysName = String(255, 0)aa = GetVolumeInFORMation(path, VolName, 256, VolSeri, Maxlen, Sysflag, fsysName, 256)VolName = Left(VolName, InStr(1, VolName, Chr(0) - 1)fsysName = Left(fsysName, InStr(1, fsysName, Chr(0) - 1)compress = Sysflag And FILE_VOLUME_IS_CO
15、MPRESSEDIf compress = 0 ThenMe.Print “未压缩驱动器“ElseMe.Print “压缩驱动器“End IfMe.Print “驱动器卷标 :“, VolNameMe.Print “驱动器标号 : “, Hex(VolSeri)Me.Print “驱动器文件系统 (FAT, HPFS, or NTFS)“, fsysNameMe.Print “支持的文件名长度 “, MaxlenEnd SubPrivate Sub Command1_Click()FORM1.Caption = “c:驱动器信息 “Call GetVolInfo(“c:“)End Sub-将包
16、含有 Null 结尾的字符串转换为 VB 字符串在 VB 编程调用 Windows API 函数时, 经常会碰到以 Null 结尾的字符串, 下面是一段将Null 结尾字符串转换到 VB 字符串的函数 :Public Function LPSTRToVBString$(ByVal s$)Dim nullpos&nullpos& = InStr(s$, Chr$(0)If nullpos 0 ThenLPSTRToVBString = Left$(s$, nullpos - 1)ElseLPSTRToVBString = “End IfEnd Function-启动控制面板命令控制面板模块: C
17、ontrol.Exe命令: rundll32.Exe shell32.dll, Control_RunDLL结果: 显示控制面板窗口 ?例子:Dim xx = Shell(“rundll32.exe shell32.dll,Control_RunDLL“)辅助选项模块: access.cpl命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,5结果: 显示辅助选项/ 常规。命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,1结果: 显示辅助选项/ 键盘。命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,2结果: 显示辅助选项/ 声音。命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,3结果: 显示辅助选项/ 显示。命令: rundll32.exe shell32.dll,Control_RunDLL access.cpl,4