从 Visual Basic 6.0 到 Visual Basic.NET(VB.net)的转换
从 Visual Basic 6.0 到 Visual Basic.NET 的转换
Microsoft Visual Basic.NET 是 Microsoft Visual Basic© 的后续版本,它是基于 .NET
框架重新设计的,您可以用它来轻松地创建用于 Microsoft Windows© 操作系统和 Web 的下一代应用程序。使用 Visual
Basic.NET,可视化开发 Web 应用程序、Web 服务、Windows 应用程序和服务器端组件将变得轻而易举。此外,Visual Basic.NET
使用了 Windows 应用程序的 XCOPY 部署方案,使您不必再担心 DLL 版本问题。随着 Visual Basic.NET 的发布,“DLL
噩梦”将成为过去。
在设计 Visual Basic.NET 时,我们着眼于世界各地 Visual Basic 开发者的要求。Visual Basic
语言现在是真正的面向对象语言,并支持实现继承。窗体设计器支持可视化继承,并包含窗体自动调整大小、资源本地化和访问选项支持等新特性。现在的数据工具继续支持 XML
数据,并可以共同使用设计时数据绑定和断开数据。此外,Visual Basic.NET 是基于 .NET 框架直接创建的,因此可以使用所有的平台特性,并能够与其他
.NET 语言协同工作。
在发布这些功能的同时,我们对产品的几个方面作了修改。本文档介绍了从 Visual Basic 6.0 到 Visual Basic.NET
的一些变更,并解释了进行这些变更的原因。本文还介绍 Visual Basic.NET
升级向导的功能。它是作为产品的一部分提供的工具,可以帮助您将现有的应用程序升级为 Visual Basic.NET 版本。
有关从 Visual Basic 6.0 升级到 Visual Basic.NET 的其他信息,请参阅白皮书《准备将 Visual
Basic 6.0 应用程序升级到 Visual Basic.NET》(英文)。此白皮书介绍了升级过程并提供了尽可能顺利升级的建设性意见。
语言
Variant
Visual Basic 6.0 |
Variant 是一种特殊的“通用”数据类型,可以包含除定长字符串之外的各类数据。Object |
Visual Basic.NET |
公共语言运行时 (CLR) 使用 Object 作为通用数据类型。Visual Basic.NET 没有继续使用 |
升级 |
将 Variant 数据类型变为 Object,因此以下代码: Dim x As Variant 升级后将变为: Dim x As Object |
Integer 和 Long
Visual Basic 6.0 |
Long 变量存储为带有符号的 32 位数字,而 Integer 变量存储为 16 位数字。 |
Visual Basic.NET |
Long 变量存储为带有符号的 64 位数字,Integer 变量存储为 32 位数字,而 Short 由于部分 .NET 框架技术以现代的 32 位和 64 位技术为基础,因此根据新技术更新数据大小是明智之举。 |
升级 |
修改变量的类型,因此以下代码: Dim x As Integer 升级后将变为: Dim x As Short |
Currency
Visual Basic 6.0 |
Visual Basic 6.0 支持 Currency 数据类型。您不能将变量声明为 Decimal Currency 变量以整数格式存储为 64 位数字,以 10,000 为标度,以将数字表示为定点数,其小数点左边为 15 位,右边为 4 Decimal 变量存储为带有符号的 96 位整数,标度为 10 的不同乘幂。10 次幂的刻度因子指定了小数点右边的数字位数,其范围为 0 |
Visual Basic.NET |
Currency 数据类型的精度不够,无法避免四舍五入的误差,因此创建了 Decimal |
升级 |
将 Currency 数据类型转换为 Decimal,因此以下代码: Dim x As Currency 升级后将变为: Dim x As Decimal |
Date
Visual Basic 6.0 |
Date 变量在内部以 Double 格式存储,能够作为 Double 类型的变量操作。 Date 变量存储为 IEEE 64 位浮点数,表示从 100 年 1 月 1 日到 9999 年 12 月 31 日的日期和从 当其他数字类型转换为 Date 时,小数点左边的值表示日期信息,而小数点右边的值表示时间信息。午夜为 0,正午为 0.5。整个数值为负表示 |
Visual Basic.NET |
Date 在内部存储为 64 位整数,因此无法直接作为 Double 进行操作。.NET 框架提供了 |
升级 |
升级工具并非能够检测到所有使用变量将 Date 存储为 Double 的情况,但它一般会在将 Double Dim dbl As Double 升级后将变为: Dim dbl As Double |
定长字符串
Visual Basic 6.0 |
除类模块的 Public 变量之外,其他变量均可以声明为定长字符串。 |
Visual Basic.NET |
CLR 第一版不支持定长字符串。在后续版本中将添加这一支持功能。 |
升级 |
在大多数情况下不会出现问题。假设为定长字符串表现方式,则以下代码: Dim MyFixedLengthString As String * 100 升级后将变为: Dim MyFixedLengthString As New VB6.FixedLengthString(100) 有关该主题的全面说明,请参阅白皮书《准备将 Visual |
Type
Visual |
Type 语句用于定义由用户定义的数据类型。 |
Visual Basic.NET |
Type 和 User-Defined Type 因此,在 Visual Basic.NET 中 Type 语句将变为 Structure。 |
升级 |
将 Type 语句变为 Structure,因此以下代码: Type MyType 升级后将变为: Structure MyType |
用户定义类型存储
Visual Basic 6.0 |
用户定义的数据类型可以包含某种数据类型、数组或先前定义的用户定义类型的一个或多个元素。在 Visual Basic 6.0 |
Visual Basic.NET |
格式是最有效的。它可能位于一段连续的内存,也可能不。结构可以被标记为封送处理属性,以确保能够作为连续内存块传递到 COM |
升级 |
在所有需要添加封送处理属性的位置,API 均标记有 TODO 注释。(属性不是自动添加的,只有将结构传递到 API |
True
Visual Basic 6.0 |
True 的值为 -1。 |
Visual Basic.NET |
True 的值为 1。 鉴于语言的协同操作,需要一种适用于所有语言的一致表示法。 |
升级 |
如果将布尔值强制转换为非布尔值,代码将标记有升级警告。例如,以下代码: Dim MyBoolean As Boolean 升级后将变为: Dim MyBoolean As Boolean |
Empty
Visual Basic 6.0 |
变量均初始化为 Empty,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,则自动转换为空字符串。 |
Visual Basic.NET |
对象变量均初始化为 Nothing,当用于数值表达式时,变量将自动转换为零,当用于字符串表达式时,将自动转换为空字符串。使用 |
升级向导 |
|
Null 和 Null 传播
Visual Basic 6.0 |
Null 值为 Variant 的子类型,表示变量不包含有效数据。Null |
Visual Basic.NET |
不支持 Null 传播。使用 ADO.NET 对数据进行编程的模型用于在检索字段的值之前先检查字段的值是否为 Null。包含 Visual Basic.NET 处理 Null 时更加直接:字符串函数(例如 |
升级 |
Null 值和 IsNull 函数标记有升级警告注释。例如,以下代码: If x Is Null Then MsgBox "Null" 升级后将变为: ' UPGRADE_WARNING: Use of IsNull() detected |
Def<Type>
Visual Basic 6.0 |
DefBool、DefByte、DefInt、DefLng、DefCur、DefSng、DefDbl、DefDec、DefDate、DefStr、DefObj |
Visual Basic.NET |
避免使用隐式类型声明,提高了代码的可读性和可靠性。 |
升级 |
将变量类型的显式声明插入代码。例如,以下代码: DefStr a-z 升级后将变为: Sub MySub |
块内的局部变量
Visual Basic 6.0 |
从包含声明的行至过程结束的范围内,局部变量均可见。 |
Visual Basic.NET |
Visual Basic.NET 支持变量的块范围。这意味着从包含声明的行开始,至出现声明的块结束,局部变量均可见。例如: Sub Test(x As Integer) 以上示例中的变量 y 仅在声明该变量的块中可用;更确切地说,它仅在其声明至 Else 语句之间可用。如果需要在整个过程中使用变量,则必须在 变量的块范围是许多结构语言共有的功能。过程局部变量允许定义过程内部变量,从而对结构化编程提供支持,与此类似,块级别变量允许定义代码块内部变量,从而对结构化分解提供支持。 |
升级 |
如果变量在块内声明,变量将自动移至模块级范围。例如,以下代码: If x =1 Then 升级后将变为: Dim y As Integer |
新的自动重新实例化
Visual Basic 6.0 |
窗体的类变量声明 Dim x As New MyClass 等同于: Dim x As MyClass 即使变量已经设置为 Nothing,在下一次调用时该变量仍将重新实例化。 |
Visual Basic.NET |
窗体的变量声明 Visual Basic.NET 声明 |
升级 |
这极少会成为问题。但是,如果代码尝试使用已设置为 Nothing Dim x As New MyClass |
对象终结
Visual Basic 6.0 |
COM 引用计数机制用于垃圾回收对象实例。如果对象不在循环中,当对象不再使用,引用计数会立即检测到此情况,并且运行终结代码。 |
Visual Basic.NET |
跟踪垃圾回收器从存储在堆栈变量、模块变量和共享变量中的可及引用开始,将对象过一遍。此跟踪进程作为后台任务运行,因此在指向对象的最后一个引用结束和添加新引用之间有一个不定的时间段。 在某些情况下,客户端确实需要能够强制某一对象释放资源。CLR 规定这样的对象应当实现 IDisposable 接口,这就提供了 跟踪垃圾回收器能够正确释放引用循环中的对象。此外,跟踪垃圾回收器的性能比引用计数要好得多。 |
升级 |
在大多数情况下,这一改变不会导致问题。如果您的代码中使用了资源句柄开放(连接或文件句柄),则必须显式关闭此句柄。此问题易于检测并会导致运行时错误。 |
数组
Visual Basic 6.0 |
数组可以由任何整数数字的上下限限定。如果在声明中未指定下限,将使用 Option Base 语句确定默认下限。 |
Visual Basic.NET |
为了与其他语言协同操作,所有数组的下限均必须为零。这样就不再需要 Option Base 语句。 |
升级 |
ReDim
Visual Basic 6.0 |
Visual Basic 6.0 中的固定大小数组和不定大小数组有所区别。固定大小数组通过 Dim |
Visual Basic.NET |
ReDim 语句仅用于为数组分配或重新分配空间,而不能用于重新分配数组。这是因为 Visual Basic.NET 由于所有变量声明均可声明变量并指定变量的初始值,使用 ReDim 同时声明和初始化变量就变得多余和不必要了。只需要 Dim |
升级 |
如果 ReDim() 用于声明数组,在代码中会自动插入相应的声明。但是,最好的方法是您自己先在数组中插入 Dim |
赋值
Visual Basic 6.0 |
赋值形式有两种:Let 赋值(默认)和 Set 赋值。用 Set 语句为 cn 赋值。 |
Visual Basic.NET |
仅有一种赋值形式。 |
升级向导 |
删除 Set 和 Let 语句。解析强类型对象的默认属性,并将属性显式添加到代码中。 有关该主题的全面说明,请参阅白皮书《准备将 Visual |
And、Or、Xor 和 Not
Visual Basic 6.0 |
And、Or、Xor 和 Not |
Visual Basic.NET |
And、Or 和 Xor 仅适用于布尔型。对于 And 和 Or |
升级 |
如果 And/Or 语句是非布尔型或者包含函数、方法或属性,此语句将升级为使用兼容性函数,与 Visual Basic 6.0 有关该主题的全面说明,请参阅白皮书《准备将 Visual |
运算符优先级
Visual Basic 6.0 |
逻辑和位的 And、Or、Xor 和 Not |
Visual Basic.NET |
And、Or、Xor 和 Not 运算符的优先级低于比较运算符,因此 由于 BitAnd、BitOr 和 BitNot |
升级 |
由升级向导处理。有关该主题的全面说明,请参阅白皮书《准备将 Visual |
调用过程
Visual Basic 6.0 |
支持两种类型的过程调用:一种使用 Call 语句,要求使用括号括住参数列表;另一种不使用 Call 在 Visual Basic 6.0 |
Visual Basic.NET |
在所有情况下参数列表均需要使用括号。 |
升级向导 |
为没有使用括号的过程调用插入括号。 |
静态过程
Visual Basic 6.0 |
通过 Static 关键字可以声明过程,此关键字表明在调用之间保留过程的局部变量。 |
Visual Basic.NET |
在过程中不支持 Static 关键字,并且所有的静态局部变量均需通过 Static 语句显式声明。 需要将过程中的所有变量均声明为静态的情况很少。删除此功能简化了语言,并且提高了可读性,因为局部变量总是位于堆栈中,除非已显式声明为 |
升级 |
如果过程标记为 Static,则所有的局部变量均变为 |
参数的 ByVal/ByRef 默认值
Visual Basic 6.0 |
参数未指定其默认值为 ByVal 或 ByRef 时,其默认值为 ByRef。 |
Visual Basic.NET |
<参数未指定其默认值为 ByVal 或 ByRef 时,其默认值为 ByVal。 将参数默认值指定为 ByVal 而不指定为 请用户注意避免由 Visual Basic 6.0 升级到 Visual Basic.NET 带来的混乱。如果用户输入的参数声明未显式指定其默认值为 |
升级 |
为没有指定 ByVal 或 ByRef 为默认值的参数添加 |
IsMissing 参数和可选参数
Visual Basic 6.0 |
没有默认值的可选 Variant 参数将被初始化为特殊的错误代码,此错误代码可以由 IsMissing |
Visual Basic.NET |
在 Visual Basic.NET 中要求所有的可选参数均指定默认值。这样可以减少语言中特殊值的数量,从而简化语言。 |
升级 |
IsMissing 函数由 IsNothing |
ParamArray 参数
Visual Basic 6.0 |
当变量传递给 ParamArray 参数时,可以通过被调用的函数修改。不支持 ByVal ParamArray |
Visual Basic.NET |
当变量传递给 ParamArray 参数时,不能通过被调用的函数修改。不支持 ByRef ParamArray ParamArray 参数最常见的情况是不修改传递给此参数的变量。不支持 ByRef ParamArray |
升级 |
过程的 ParamArray 参数标记有升级警告。例如,以下代码: Function MyFunction(ParamArray p() As Variant) 升级后将变为: ' UPGRADE_WARNING: ParamArray p was changed from ByRef to ByVal |
声明中的 As Any 参数
Visual Basic 6.0 |
本地 API 的参数可以声明为 |
Visual Basic.NET |
重载的 Declare 语句可以定义为允许调用带有两种或多种数据类型的本地 API。例如,以下 Declare 语句: Private Declare Function GetPrivateProfileString _ 可以由两个 Declare 版本代替,一个接受 Long,一个接受字符串。 Overloads Private Declare Function GetPrivateProfileStringKey _ 这提高了类型的安全性,并减少了导致程序失败的小毛病。这一情况的存在是因为编译器不允许通过没有显式定义的数据类型来调用 API。 |
升级 |
使用 As Any 参数的 Declare 语句标记有升级警告。 |
Implements
Visual Basic 6.0 |
Implements 语句指定在其出现的类模块中实现的接口或类。 |
Visual Basic.NET |
Visual Basic.NET 中的 Implements 与 Visual Basic 6.0 中的 Implements
由于要求每一种实现接口方法的方法均使用 Implements |
升级 |
如果类 Interface _b |
属性
Visual Basic 6.0 |
在 Visual Basic 6.0 中,特定属性的 Get、Let 和 Set |
Visual Basic.NET |
属性的 Get 和 Set 函数必须具有相同级别的访问选项。这样就便于 Visual Basic.NET 与其他 .NET |
升级 |
如果访问选项的级别不同,则新属性为 Public。 |
默认属性
Visual Basic 6.0 |
任何成员均可标记为类的默认值。 |
Visual Basic.NET |
只有接受参数的属性可以标记为默认值。对于将成为集合中的索引的带参数属性,这一情况很常见。 这使得代码的可读性更强,因为对没有成员的对象变量的引用通常指向对象自身,而不是指向上下文中的对象和其他上下文中的默认属性。例如,语句 此外,删除这种二义性避免了使用单独的语句执行引用赋值。赋值 |
升级 |
尽可能解析默认属性。无法解析时(延迟绑定对象)将添加错误注释。 |
枚举
Visual Basic 6.0 |
枚举常数可以无限定地被引用。 |
Visual Basic.NET |
如果在文件或项目级别为枚举添加了 Import,则枚举常数可以无限定引用。 这样可以与类、结构和接口保持一致,在类、结构和接口中,可以给成员赋予通用名称,而不必担心与其他成员冲突。例如,Color 枚举和 |
升级 |
对枚举的引用将变为完全限定。 |
While
Visual Basic 6.0 |
While 语句以 WEnd 语句结束。 |
Visual Basic.NET |
为了与其他块结构保持一致,While 的结束语句变为 End |
升级 |
将 WEnd 语句变为 End While。 |
On…GoTo 和 On…GoSub
Visual Basic 6.0 |
根据表达式的值,On expression GoTo destinationlist 和 |
Visual Basic.NET |
On…GoTo 和 On…GoSub 是非结构化的编程构造。它们的使用让程序更加难以阅读和理解。Select 注意:仍然支持 On Error GoTo。 |
升级 |
以下示例: On MyVariable GoTo 100,200,300 将标记有升级错误: ' UPGRADE_ISSUE On MyVariable GoTo was not upgraded 您应当重写代码以避免使用这样的语句,例如: On x Goto 100,200,300 可以重写为: Select Case x |
GoSub…Return
Visual Basic 6.0 |
GoSub line…Return 语句在过程中分支到子例程,然后从子例程返回。 |
Visual Basic.NET |
GoSub…Return |
升级 |
与 On…GoTo 相同,这些语句均标记有升级错误。 |
LSet
Visual Basic 6.0 |
LSet 用空格填充字符串使其为指定长度,或者将用户定义类型的变量复制到另一个用户定义类型的变量。 |
Visual Basic.NET |
不支持 LSet 语句。LSet |
升级 |
语句: LSet a1 = a2 将标记有升级错误 ' UPGRADE_ISSUE: LSet cannot assign a UDT from one type to another |
VarPtr、StrPtr 和 ObjPtr
Visual Basic 6.0 |
VarPtr、StrPtr 和 ObjPtr 以整数形式返回变量的地址,然后将此地址传递到使用地址的 API |
Visual Basic.NET |
可以检索数据项的地址,但是检索必须通过调用 CLR 才能进行。这是因为 CLR 通常可以在内存中自由移动项目,因此需要让 CLR Dim MyGCHandle As GCHandle = GCHandle.Alloc(o,GCHandleType.Pinned) 允许运行时移动数据项目能够改善运行时的性能。 |
升级 |
这些语句不会自动升级,因此将标记有“(statement) is not supported”[(语句)不被支持] 的升级错误。例如,以下代码: a = VarPtr(b) 升级后将变为: ' UPGRADE_ISSUE: Function VarPtr() is not supported 这也会导致编译错误。 |
文件 I/O
Visual Basic 6.0 |
语言中包括文件 I/O 语句。 |
Visual Basic.NET |
通过类库使用文件 I/O 操作。从语言中删除文件 I/O 语句以便在 Visual Basic.NET 中使用不同的 I/O 库。如果语言中存在文件 |
升级 |
文件 I/O 语句将升级为相应的函数。例如,以下代码: Open nput ) |
Debug.Print
Visual Basic 6.0 |
Debug.Print 将一行文字输出到“立即”窗口。 |
Visual Basic.NET |
Debug.WriteLine 将一行文字输出到“输出”窗口。还可以使用 Debug.Write |
升级 |
Debug.Print 升级为 Debug.WriteLine。 |
资源文件
Visual Basic 6.0 |
Visual Basic 6.0 支持每个工程使用一个 .res 文件。 |
Visual Basic.NET |
Visual Basic.NET 支持多种资源文件。可以绑定窗体以自动从新的 .resX 格式资源文件中检索资源。任何 CLR 类均可存储在 .resX |
升级 |
文件由 .res 升级为 .resX,并且代码被修改以便从 .resX 文件中加载。 |
Windows 应用程序
Visual Basic 窗体
Visual Basic 6.0 |
Visual Basic 6.0 具有自己的窗体包,用于创建图形 Windows 应用程序。 |
Visual Basic.NET |
对于 Visual Basic.NET,Windows 窗体是一种新的窗体包。由于 Windows 窗体是以公共语言运行时 (CLR) 为目标构造的,因此 Windows 窗体集还为 Visual Basic |
升级 |
将 Visual Basic 窗体升级为 Windows 窗体。 |
PrintForm 方法
Visual Basic 6.0 |
PrintForm 方法将 Form |
Visual Basic.NET |
在 Windows 窗体中,Visual Basic.NET |
升级 |
PrintForm |
Circle、Cls、PSet、Line 和 Point 方法
Visual Basic 6.0 |
通过 Circle、Cls、PSet、Line 和 Point |
Visual Basic.NET |
Windows 窗体具有一套新的图形命令,用于替换 Circle、Cls、PSet、Line 和 |
升级 |
对这些方法的调用标记有升级错误。您可以在 System.Drawing 中记下使用 GDI+ |
Name 属性
Visual Basic 6.0 |
Name 属性返回代码中使用的名称以识别窗体、控件或数据访问对象。在运行时为只读。 |
Visual Basic.NET |
在运行时 Windows 窗体不支持窗体和控件的 Name 属性。如果需要迭代 Controls |
升级 |
控件的 Name 属性将标记有升级错误。 |
Caption 属性
Visual Basic 6.0 |
某些控件(例如 Label)具有 Caption 属性,用于确定在控件中或控件旁边显示的文字。其他控件(例如 |
Visual Basic.NET |
在 Windows 窗体中,对于所有控件,用于显示控件中文字的属性均统一称为 Text。这简化了控件的使用。 |
升级 |
将控件的 Caption 属性变为 Text。 |
Tag 属性
Visual Basic 6.0 |
Tag 属性可以返回或设置用于存储程序所需额外数据的表达式。 在 Visual Basic 6.0 中无法扩展内置控件,所以 Tag 属性是必需的。 |
Visual Basic.NET |
在 Windows |
升级 |
兼容库中的 Windows 窗体扩展程序 Tag 控件用于提供相同的功能。 |
ScaleMode 属性
Visual Basic 6.0 |
ScaleMode 属性返回或设置一个值,以在使用图形方法或定位控件时表明对象的坐标度量单位。 |
Visual Basic.NET |
Windows 窗体始终使用象素作为度量单位,简化了窗体布局。 此外,Windows 窗体使用更好的方法来调整大小。AutoScaleBaseSize 属性根据屏幕的分辨率 (dpi) |
升级 |
使用“twip”(缇)(Visual Basic 6.0 中 ScaleMode 的默认设置)的代码将完全升级。如果 有关该主题的全面说明,请参阅白皮书《准备将 Visual |
字体
Visual Basic 6.0 |
窗体和控件可以使用任何 Windows 字体。 |
Visual Basic.NET |
窗体和控件只能使用 TrueType 或 OpenType |
升级 |
如果在应用程序中使用非 TrueType 字体,这些字体将变为默认的 Windows |
Screen.MousePointer 属性
Visual Basic 6.0 |
Screen 对象的 MousePointer |
Visual Basic.NET |
如果鼠标指针位于应用程序内部的窗体中,则可以进行操作;当其位于应用程序外时则不能。在今后的版本中我们将继续完善其功能。 |
升级 |
使用 Sceen.MousePointer 的语句标记有升级错误。 |
Timer.Interval 属性
Visual Basic 6.0 |
Timer 控件的 Interval 属性返回或设置 Timer 事件调用之间的毫秒数。如果设置为 0,则禁用 |
Visual Basic.NET |
Interval 属性表明计时器刻度之间的时间(以毫秒为单位)。此属性不能设置为 0。Enabled |
升级 |
如果 Timer.Interval 设置为 0,升级向导能够检测到这一情况,并为 Timer.Interval 建议您在 Visual Basic 6.0 应用程序中使用 |
控件数组
Visual Basic 6.0 |
控件数组是一组共享同一名称和类型的控件。它们也共享同一事件过程。控件数组至少有一个元素,只要您的系统资源和内存允许,它可以有任意多个元素。同一控件数组的元素具有各自的属性设置。 |
Visual Basic.NET |
Windows 窗体体系结构可以处理使用控制数组的多种方案。例如,在 Windows |
升级 |
兼容库中的“控件数组 Windows 窗体”扩展程序控件提供了这种功能。 |
Menu 控件
Visual Basic 6.0 |
Menu 控件代表菜单树中的各个项目。同一 Menu 控件实例可以同时在主菜单或上下文菜单中使用。 |
Visual Basic.NET |
MenuItem 控件代表菜单树中的各个项目。MenuItem 控件可以添加至 MainMenu 项目或 |
升级 |
使用上下文菜单的代码将标记有升级错误。可以使用 MenuItem.CloneMenu 创建 MainMenu 项目的副本,用作 |
OLE 容器控件
Visual Basic 6.0 |
OLE 容器控件使您可以将 OLE 对象添加至窗体。 |
Visual Basic.NET |
Visual Basic.NET 中没有 OLE 容器控件。如果需要与 OLE 容器控件相当的控件,可以将 WebBrowser |
升级 |
在升级报告中报告此升级错误,并在窗体中放置不受支持控件的占位符。 |
Image 控件
Visual Basic 6.0 |
Image 和 PictureBox 控件均可显示位图、图标、图元文件、增强型图元文件、JPEG 或 GIF |
Visual Basic.NET |
Visual Basic.NET 中的 PictureBox 控件代替了 Visual Basic 6.0 中的 |
升级 |
Image 控件变为 PictureBox 控件。 |
Line 和 Shape 控件
Visual Basic 6.0 |
Line 控件显示水平线、垂直线或对角线。Shape |
Visual Basic.NET |
System.Drawing 中的 GDI+ 类代替了 Line 和 Shape |
升级 |
水平和垂直 Line 控件变为 Label 控件(没有文字,高度或宽度设置为 矩形和正方形 Shape 控件变为 Label 控件。其他 Shape |
Windowless 控件
Visual Basic 6.0 |
轻便控件,有时称为无窗口的控件,与常规控件最显著区别是:没有窗口句柄(hWnd 属性)。因此,它们使用的系统资源较少。您可以在设计时将 |
Visual Basic.NET |
在 Windows 使用无窗口控件也有缺点(如分层等布局问题),但 Microsoft 认识到了无窗口控件的作用,并将发布示例来展示如何在 Windows |
升级 |
无需特别处理。 |
Clipboard
Visual Basic 6.0 |
Clipboard 对象提供了对系统剪贴板的访问。 |
Visual Basic.NET |
Clipboard 类提供了在系统剪贴板上放置数据和从其上检索数据的方法。新的 Clipboard |
升级 |
由于对象模块之间的差异,现有的剪贴板代码无法自动升级。Clipboard |
动态数据交换
Visual Basic 6.0 |
某些控件具有支持动态数据交换 (DDE) 会话的属性和方法。 |
Visual Basic.NET |
Windows 窗体不支持内置 DDE。 |
升级 |
DDE 属性和方法标记有升级警告。 |
Web 应用程序
WebClass
Visual Basic 6.0 |
WebClass 是驻留在 Web 服务器上的 Visual Basic 组件,能够响应浏览器的输入。WebClass 通常包括 |
Visual Basic.NET |
Web 窗体具有 .NET 框架功能,可以用来为 Web 应用程序创建基于浏览器的用户界面。Visual Basic.NET |
升级 |
WebClass 将升级为 Web 窗体。所有状态存储调用均标记有升级警告。可以重新编写这些代码,以使用 ASP.NET 状态管理的优势。 您也可以选择继续使用 Visual Basic 6.0 中的 WebClass 应用程序,从 Visual Basic.NET Web 窗体中定位至 |
ActiveX 文档和 DHTML 应用程序
Visual Basic 6.0 |
ActiveX? 文档在 Internet 浏览器窗口中显示,并提供内置的视区滚动、超链接和菜单协商。DHTML 应用程序包含 DHTML 页面和客户端 |
Visual Basic.NET |
Web 窗体通过采用 HTML 以支持多种应用程序。通过使用寄存在浏览器中的 Windows 窗体控件或已下载的“安全 Windows |
升级 |
虽然 ActiveX 文档和 DHTML 应用程序无法直接升级,您仍可以在 ActiveX 文档、DHTML 应用程序和 Web |
数据
ADO、RDO 和 DAO 代码
Visual Basic 6.0 |
ActiveX? 数据对象 (ADO)、远程数据对象 (RDO) 和数据访问对象 (DAO) 用于连接和断开数据访问。 |
Visual Basic.NET |
ADO.NET 提供了断开数据访问的其他类。与用于分布式应用程序的较早版本 ADO 相比,这些类提供了更好的性能和可伸缩性。它们也使 XML |
升级 |
Visual Basic.NET 代码中仍然可以使用 ADO、RDO 和 DAO。 |
ADO、RDO 和 DAO 数据绑定
Visual Basic 6.0 |
Visual Basic 窗体中的控件可以绑定到 ActiveX? 数据对象 (ADO)、远程数据对象 (RDO) 和数据访问对象 (DAO) |
Visual Basic.NET |
ADO.NET 为 Windows 窗体控件提供了读/写数据绑定,为 Web 窗体提供了只读数据绑定。 |
升级 |
ADO 数据绑定升级为新的 ADO.NET 数据绑定。但是,RDO 和 DAO |
IDE
“立即”窗口
Visual Basic 6.0 |
在设计模式的“立即”窗口,您可以运行部分代码,而不必通过其 Startup |
Visual Basic.NET |
可以从设计模式的“命令”窗口中执行 IDE 命令,但是不能运行应用程序的各个部分。这是因为 Visual Basic.NET |
IDE 和项目扩展性
Visual Basic 6.0 |
只有 Visual Basic 6.0 支持 Visual Basic 6.0 集成开发环境 (IDE) 扩展模型。 |
Visual Basic.NET |
对于 Visual Studio.NET 中的所有工程类型,新的 IDE Visual Studio.NET 代码模型也给扩展级编写者提供了公共对象模型,以编写跨不同语言工程使用的代码。Visual Basic |