从VB 6.0到VB.NET的转换(4)

网络整理 - 07-26
升级
向导


这些语句不会自动升级,因此将标记有“(statement) is not supported”[(语句)不被支持] 的升级错误。例如,以下代码:

a = VarPtr(b)
升级后将变为:

' UPGRADE_ISSUE: Function VarPtr() is not supported
  a = VarPtr(b)
这也会导致编译错误。


文件 I/O
Visual
Basic 6.0 语言中包括文件 I/O 语句。



Visual Basic.NET


通过类库使用文件 I/O 操作。从语言中删除文件 I/O 语句以便在 Visual Basic.NET 中使用不同的 I/O 库。如果语言中存在文件 I/O 语句,将会使代码更加累赘,标识符 Open、Close、Print 和 Write 将成为保留字。



升级
向导


文件 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 窗体可以充分利用 CLR 的全部功能。特别是,由于 Windows 窗体包具有部署、应用程序分离、版本和代码访问安全特性方面的优势,您现在可以构造基于 Windows 的客户端应用程序,其部署和更新明显更加简易。您甚至可以构造与 HTML 具有相同浏览器部署方案的 Windows 窗体应用程序。正如代码访问安全性的粒度控制一样,这些特性也使得在浏览器中使用 Windows 窗体控件非常令人瞩目。

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 和 Point。Windows 窗体包是在 GDI+ 的基础上构建的。GDI+ 是功能丰富的二维文字和图象处理图形库,现在可以直接在 Visual Basic.NET 中使用。在以前的版本中,如果不通过 Declare 语句和 GDI API,Visual Basic 程序员无法使用这些功能。虽然这一转变比较大,但是 GDI+ 的灵活性和强大功能让程序员能够快速开发应用程序,而使用以前版本的 Visual Basic 将会花费多得多的工作量。



升级
向导


对这些方法的调用标记有升级错误。您可以在 System.Drawing 中记下使用 GDI+ 类的图形调用。


Name 属性
Visual
Basic 6.0 Name 属性返回代码中使用的名称以识别窗体、控件或数据访问对象。在运行时为只读。



Visual Basic.NET


在运行时 Windows 窗体不支持窗体和控件的 Name 属性。如果需要迭代 Controls 集合以查找某一名称的控件,您可以使用 .NET 框架的 System.Reflection 类进行查找。



升级
向导


控件的 Name 属性将标记有升级错误。


Caption 属性
Visual
Basic 6.0  某些控件(例如 Label)具有 Caption 属性,用于确定在控件中或控件旁边显示的文字。其他控件(例如 TextBox)具有 Text 属性,用于确定控件中包含的文字。



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 的默认设置)的代码将完全升级。如果 ScaleMode 为非缇,您将遇到调整大小方面的问题。

有关该主题的全面说明,请参阅白皮书《准备将 Visual Basic 6.0 应用程序升级到 Visual Basic.NET》(英文)。


字体
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,则禁用 Timer 控件。Enabled 属性还用于确定计时器是否在运行。这将引起混乱,因为即使 Enabled 属性为 True,如果时间间隔为 0,仍不能启用计时器。



Visual Basic.NET


Interval 属性表明计时器刻度之间的时间(以毫秒为单位)。此属性不能设置为 0。Enabled 属性指定计时器是否在运行。这一方式更加直接,可以简化 Timer 对象的编码。



升级
向导


如果 Timer.Interval 设置为 0,升级向导能够检测到这一情况,并为 Timer.Interval 标记升级错误。

建议您在 Visual Basic 6.0 应用程序中使用 Timer.Enabled,因为此属性可以顺利升级。


控件数组
Visual
Basic 6.0 控件数组是一组共享同一名称和类型的控件。它们也共享同一事件过程。控件数组至少有一个元素,只要您的系统资源和内存允许,它可以有任意多个元素。同一控件数组的元素具有各自的属性设置。



Visual Basic.NET


Windows 窗体体系结构可以处理使用控制数组的多种方案。例如,在 Windows 窗体中可以通过单一事件句柄处理多个控件的多个事件。



升级
向导


兼容库中的“控件数组 Windows 窗体”扩展程序控件提供了这种功能。


Menu 控件
Visual
Basic 6.0 Menu 控件代表菜单树中的各个项目。同一 Menu 控件实例可以同时在主菜单或上下文菜单中使用。



Visual Basic.NET


MenuItem 控件代表菜单树中的各个项目。MenuItem 控件可以添加至 MainMenu 项目或 ContextMenu 项目,但不能同时添加。要在 MainMenu 对象和 ContextMenu 对象中共享菜单,可以在 MenuItem 中使用 CloneMenu 方法创建菜单副本。



升级
向导


使用上下文菜单的代码将标记有升级错误。可以使用 MenuItem.CloneMenu 创建 MainMenu 项目的副本,用作 ContextMenu 项目。


OLE 容器控件
Visual
Basic 6.0  OLE 容器控件使您可以将 OLE 对象添加至窗体。



Visual Basic.NET


Visual Basic.NET 中没有 OLE 容器控件。如果需要与 OLE 容器控件相当的控件,可以将 WebBrowser 控件添加至窗体,并将其用作 OLE 容器控件。



升级
向导


在升级报告中报告此升级错误,并在窗体中放置不受支持控件的占位符。


Image 控件
Visual
Basic 6.0 Image 和 PictureBox 控件均可显示位图、图标、图元文件、增强型图元文件、JPEG 或 GIF 文件的图形。



Visual Basic.NET


Visual Basic.NET 中的 PictureBox 控件代替了 Visual Basic 6.0 中的 PictureBox 和 Image 控件。Windows 窗体中的 PictureBox 控件还支持动态 GIF 文件。但是,如果您需要一个简单方案,以便在窗体中绘制图象,您也可以不使用窗体的 OnPaint 事件,而使用 DrawImage 方法。



升级
向导


Image 控件变为 PictureBox 控件。


Line 和 Shape 控件
Visual
Basic 6.0  Line 控件显示水平线、垂直线或对角线。Shape 控件显示矩形、正方形、椭圆形、圆形、圆角矩形或圆角正方形。



Visual Basic.NET


System.Drawing 中的 GDI+ 类代替了 Line 和 Shape 控件。要在窗体中绘制各种形状的图形,请不要使用 OnPaint 事件,而使用 GDI+ Draw 方法绘制圆、正方形等各种形状。



升级
向导


水平和垂直 Line 控件变为 Label 控件(没有文字,高度或宽度设置为 1)。对角线控件在升级报告中报告有升级错误,并在窗体中放置不受支持控件的占位符。

矩形和正方形 Shape 控件变为 Label 控件。其他 Shape 控件在升级报告中报告有升级错误,并在窗体中放置不受支持控件的占位符。


Windowless 控件
Visual
Basic 6.0 轻便控件,有时称为无窗口的控件,与常规控件最显著区别是:没有窗口句柄(hWnd 属性)。因此,它们使用的系统资源较少。您可以在设计时将 Windowless 属性设置为 True 以创建轻便用户控件。轻便用户控件只能包含其他轻便用户控件。并非所有容器均支持轻便控件。



Visual Basic.NET


在 Windows 窗体中,大多数无窗口控件默认在窗口中使用。使用无窗口控件的主要优点是:当窗体中有非常大量的控件时,可以减少资源消耗(窗口句柄)。这仅限于 Windows 9x。Microsoft Windows NT? 和 Microsoft Windows 2000 没有这种资源限制。

使用无窗口控件也有缺点(如分层等布局问题),但 Microsoft 认识到了无窗口控件的作用,并将发布示例来展示如何在 Windows 窗体中获得类似效果。