我的编程背景是VB/C# .NET、PHP、C ++,主要是MySQL,虽然我曾在更小的规模上使用过SQL Server。任何人对VB6编程可以给我什么建议或资源?虽然我能够阅读VB6代码并理解正在发生的事情,但我不确定我能够很好地开始编写和/或修改而不会破坏任何内容,因为距离我上次做VB.NET工作已经有些年了。
其他人能提供什么建议?任何相关的资源和/或故事都可以贡献。请随意分享你认为相关但我没有提到的事情。
谢谢!
可能已经存在,但请确保在所有文件的顶部都有Option Explicit。它强制声明变量并减少了由于拼写错误而错误地创建临时变量的机会。
Appleman的在Visual BASIC 6中开发COM/ActiveX组件对COM与VB6的交互有很好的处理。他还对Win32和VB编程做了很好的介绍。
P.S.(感谢Daok的提醒),如果你发现有人在使用On Error Resume Next
,你有我的允许去撞他们的头。
Public Property Get NewEnum() As IUnknown
Set NewEnum = mCol.[_NewEnum]
End Property
将mCol作为私有Collection变量的名称。
再次使用对象浏览器,右键单击NewEnum。
您需要:
请记住,整数为16位,长整数为32位。我建议将大多数整数变量声明为Long。在早期,这对于速度和内存占用很重要,但是随着今天的计算机,最好只使用Long而不必担心超出限制。
像其他地方建议的那样使用Option Explicit。
Visual BASIC 6非常擅长隐式类型转换。如果您想确保,可以使用Cxxx系列的转换函数。
Variant比.NET的对象更适合处理各种对象类型,包括类。如果您需要制作处理数据库并且用户可以选择用于该表单的哪个表的自定义表单,则可能会发现它很有用。使用Variant可以更轻松地处理不同表格的字段具有不同类型的事实。
Visual Basic 6可用于制作多层应用程序。表格可以实现类似于类的接口。
请记住,ActiveX控件在编译和编辑表单时运行。如果您不知道这一点,可能会导致各种奇怪的问题。如果您拥有自己的ActiveX控件,则特别麻烦。
建议使用on error resume next
而不是on error goto X
,但始终要立即捕获错误并重置错误处理。
示例:
...
On Error Resume Next
oDbConn.Open sDbConnString
Select Case Err.Number
Case &H80004005
MsgBox "Cannot connect to SQL-server, check your settings."
frmSettings.Show
Exit Sub
Case Else
ShowErrorAndQuit Err
End Select
On Error Goto 0
...
Select Case Err.Number
检查! 对于真实世界的代码,最好使用On Error Goto X
并在X
标记处进行Select Case Err.Number
检查。如果你想在发生错误处理程序代码后继续执行,运行Resume Next
。在VB6中没有简单的机制可以完全模拟try-catch处理异常的方式。 - awe在这里发帖并声称“On Error Resume Next”是有史以来最糟糕的语言特性的人是完全错误的。
有史以来最糟糕的语言特性是“On Error Resume”。相信我,就是这样。
对于不熟悉VB的人来说,“On Error Resume Next”意味着“出了点问题,继续执行下一行”。而“On Error Resume”则意味着“出了点问题,最好一遍又一遍地尝试……”。
On Error Resume
是不好的。但我认为它之所以能够被执行,是因为On Error
是一个命令,需要指定一些动作,这些动作可以是任何一个Resume
、Resume Next
和 Goto X
。实际上,在没有被On Error
限定的情况下,这些语句可以自己运行。语句“Resume”可以在错误处理程序部分(由On Error Goto X
启动)中单独使用,在修正引起错误的状态并尝试再次运行后使用——这真的很有意义! - aweResume
语句,通过在异常处理程序代码中设置断点,然后在调试过程中添加 Resume
来准确定位引发错误的实际命令,或在立即窗口中设置有效状态后恢复。 - awe个人而言,我喜欢在每个函数底部使用错误处理程序:On Error goto ErrorHandler
。
记住,在调用方法时不要包含括号,除非你要查看其返回值。对于单参数方法,这很容易做到,但有时会出现问题,因为传递(变量)与传递变量不同。
编写VB的人并不确定他们更喜欢0索引数组还是1索引数组。您可以使用UBound
/LBound
来检查数组的起始位置和结束位置。
不要使用“textcomparison”来转换大小写。将字符串作为文本进行比较不仅仅忽略大小写。只需将一个或两个字符串转换为大写。
如果您在运行时调用未使用的ActiveX控件,则必须关闭“项目->属性->删除有关未使用的ActiveX控件的信息”。
工具->编辑器->自动语法检查。如果您不习惯它,可以关闭它。
工具->编辑器->需要变量声明。开启。
工具->环境->程序启动时->保存更改。如果此项关闭,则即使运行程序也不会被保存。
使用运行->完全编译并启动,而非运行->启动,来运行您的代码。
工具->编辑器->自动语法检查
仅指定是否应在移动到另一行时立即获得错误消息框。 如果您编写临时内容并想从其他位置复制代码,则这非常令人烦恼。关闭此选项后,IDE仍会通过将其标记为红色来立即告诉您出了什么问题,但不会弹出烦人的消息框。 所以是的 - 您应该关闭它! - aweRun->Start With Full Compile
会在运行程序之前编译您的整个代码。Run->Start
只会运行您的代码,并在运行时编译所需内容,这可能会隐藏您未运行的代码部分中潜在的编译错误。因此,再次强调一下(只是为了解释为什么...)。 - awe除非真正必要(例如错误处理后的最终清理或VB Collection元素存在检查等某些特殊情况),否则不要使用On Error Resume Next
。
实现适当的错误处理,不要使用多个退出点,不要使用If-Then一行代码,使用Case Else块,不要使用Subs-例如下一个非常简单的函数框架:
Private Function MyFunc() As Boolean
On Error Goto ErrHandler
''some code here
If SomeBadExitConditionIsSet Then
GoTo FuncExit
End If
''some more code here
MyFunc = True
FuncExit:
''kill error handling to avoid error cycling
On Error Resume Next
''cleanup code here - you need to check Err.Number after critical operations!
''single exit point
Exit Function
ErrHandler:
''you can insert local specific error processing here, do not forget save Err.Number etc
''there is possibility to raise errors to caller function,
''but in this function we do not do that
Select Case MyGlobalErrHandler(Err.Number, Err.Description)
Case eRetry
Resume ''this is useful while debugging - good place to "Set Next Statement"
Case eIgnore
Resume Next
Case eCancel
Resume FuncExit
Case Else
Resume FuncExit
Select End
End Function