没有找到合适的产品?
联系客服协助选型:023-68661681
提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|其它|编辑:郝浩|2006-03-21 09:24:00.000|阅读 1662 次
概述:
# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>
适用于:
Visual Basic 6
Visual Basic 2005
Visual Studio 2005
摘要:轻松高效地将 Visual Basic 6 用户界面控件转换到 Visual Basic 2005 中。
简介 | |
集成用户控件 | |
使用 ActiveX 控件和 Windows 控件库 | |
升级 OCX、DLL 和第三方控件 | |
帮助您继续下一步 |
在进行 Visual Basic 6 应用程序转换时,有少量控件会比不进行转换的控件带来更多问题。在您拥有源代码的项目的控件、1997 年买回来的自定义 ActiveX 控件以及没有实际转换路径的内置 Microsoft 控件之间,要进行转换不是那么容易的。
不过,还是有可能的。Visual Basic 6 用户控件中的代码可以很好地转换到 Visual Basic 2005 中。您可以通过互操作功能来使用某些第三方控件。Visual Studio 2005 中提供的工具有助于创建 OCX 代理。所有功能都不会丢失。
最大的问题是 Microsoft 稍微调整了用户控件的定义。由于继承的使用,我们实际上可以将用户控件定义为控件集合,从而扩展控件的概念。在 Visual Basic 6 中,用户控件只是可以驻留在其他窗体中的窗体。
幸运的是 Visual Basic 2005 可以出色地完成更改工作。多数更改工作均在后台进行,但是即使细微的设置,Visual Basic 6 升级向导也能很好地对其进行转换。接下来我将对此进行解释。
将带有用户控件的 Visual Basic 6 项目转移到 Visual Basic 2005 中
我在 Visual Basic 6 中构建了一个小型用户控件(仅实现了用于输入美国社会安全号码的三个文本框)。我将使用一些技巧,进行一些设置以查看转换向导的工作方式。
图 1:Visual Basic 6 SSN 控件
我将使用 TextChanged 事件,以在文本框具有正确的字符数时在它们之间自动切换。我将该事件驻留在一个简单的窗体中(该窗体只是在消息框中显示结果),并通过转换向导运行该事件。这是一个相当简单的过程:只需在 Visual Studio 2005 中使用“文件”->“打开项目...”菜单项来打开 Visual Basic 6 项目。
令人高兴的是 Visual Basic 2005 可以非常出色地对其进行处理。向导可以正确地以 Visual Basic 2005 格式创建窗体和用户控件。甚至还添加了 ToolTipExtenderProvider,以支持默认情况下 Visual Basic 6 中的 TextBox 控件和用户控件的实例所具有的 ToolTip 属性。(请注意示例程序文件中的程序员注释使用的是英文,本文中将其译为中文是为了便于参考。)
列表 1:两个版本的代码比较
Visual Basic 6 代码
Private Sub Three_Change() If Len(Three.Text) = 3 Then Two.SetFocus End If End Sub Private Sub Two_Change() If Len(Two.Text) = 2 Then Four.SetFocus End If End Sub Public Property Get SocialSecurityNumber() SocialSecurityNumber = Three.Text & _ "-" & Two.Text & "-" & Four.Text End Property
Visual Basic 2005 代码
Option Strict Off Option Explicit On Friend Class UserControl1 Inherits System.Windows.Forms.UserControl Private Sub Three_TextChanged(ByVal eventSender As _ System.Object, ByVal eventArgs As System.EventArgs) _ Handles Three.TextChanged If Len(Three.Text) = 3 Then Two.Focus() End If End Sub Private Sub Two_TextChanged(ByVal eventSender As _ System.Object, ByVal eventArgs As System.EventArgs) _ Handles Two.TextChanged If Len(Two.Text) = 2 Then Four.Focus() End If End Sub Public ReadOnly Property _ SocialSecurityNumber() As Object Get SocialSecurityNumber = Three.Text & _ "-" & Two.Text & "-" & Four.Text End Get End Property
几乎没有改变代码,但是我没有做任何复杂的工作。毕竟,我们在此处所做的全部工作就是检查用户控件是否转换,不是吗?此方式的唯一缺陷是转换后将显示一个全局警告:“升级后需要构建用户控件”。这样比较合理,但无论如何我检查了帮助文件。
结果是,在 Visual Basic 6 中要对驻留的控件进行实时编译(每次进行更改时,切记要关闭窗口),而在 Visual Basic 2005 中情况并非如此。仅在使用解决方案之前对其构建一次即可。
控件数组并不起作用。请注意,我在示例中没有使用控件数组(即使在一个非常合适的位置),并且我不建议使用它。当使用简单控件时,使用控件数组反而会使自己陷入混乱中。为什么呢?因为 .NET 中没有互补系统。它们完全删除了这个概念。
ASP.NET:完全不同的世界
因此,似乎是如果您亲自开发了 Visual Basic 用户控件,转换就会进行的比较顺利。我没有对该示例的 Visual Basic 语言部分的每一部分进行测试,但是控件代码本身似乎没有引起太多问题。
但是对于 ASP.NET 用户控件,情况并不是这样。它们是整个不同结构的一部分,并不通过 Visual Basic 6 转换向导进行处理。实际上,ASP3 中确实没有可转换为 ASP.NET 的相应功能,因此这是合理的。
尽管最常听到的担心是在 Web 环境中使用 Windows 服务器控件,例如在 Visual Basic 6 或 ASP3 环境中使用一些 ActiveX 控件。但以后决不会再发生这种情况了。由于您可以像在 ASP3 中一样在 ASP.NET 中使用 ActiveX,因此仍然可以选择那样做。尽管 Windows 控件不在 ASP.NET 中运行,ASP.NET 控件也不会在 Windows Form 应用程序中运行。
Windows 控件库是包含 Visual Basic 2005 中的控件集合的类库。它们与指定用于 Visual Basic 2005 中的 Windows Form 的 ActiveX 控件最相似。应该努力摆脱在 Web 窗体中的可执行概念。最好使用 ClickOnce 并部署 Windows Forms 应用程序。
在该行中,当您将 ActiveX 控件转换到 Visual Basic 2005 中时,将得到一个 Windows 控件库。对于那些习惯于认为 Visual Basic 希望 ActiveX 控件主要用于 Web 的用户来说,这可能令人惊讶。实际上,ActiveX 控件只是一个公开任一容器中的某些属性的可执行控件。可以更好地控制带有继承模型的 .NET Framework,因此我们使用 Windows 控件库。
将 ActiveX 用户控件项目转移到 Visual Basic 2005 中
我在前一个项目中构建为用户控件的“社会安全号码”控件被转移到一个 ActiveX 控件项目,并通过升级向导运行。令人高兴的是,该控件与前一个示例一样运行良好,并且该模型也工作正常。我得到了一个编译到类库中的 .VB 文件。
图 2:工具箱中的控件
实际上,如图 2 所示,Visual Studio 足以胜任将控件添加到解决方案的其他项目中。这是拖放操作,就像操作内置控件一样!
假如您有一个 1997 年购买的控件,而开发人员已消失得无影无踪并且该公司也已经倒闭。现在情况将会怎样?
全部控件均不会丢失。由于缺少源代码,因此您无需像我们以前所做的那样进行纯转换。您可以使用内置工具来自动生成 COM 类的 .NET 代理(这是一个比想象中更简单的体验),或者按照我们所做的进行处理并为该 .NET 控件 DLL 创建一个 COM 包装。
在 Visual Basic 2005 中使用 Visual Basic 6 编译控件
有时,您不能访问源代码。有时,您甚至会发现一个普通的 Visual Basic 6 控件不能在 Visual Basic 2005 中运行。这时,您只好希望可以创建一个运行时可调用包装。
该问题就像在一个新计算机中安装旧网卡一样,实际上,如果您不把网卡安装在计算机上就不知道它是否可以工作。ActiveX 控件执行 Win32 库较旧的部分可以导致崩溃,有时甚至是不在 .NET 周围或正在使用的操作系统的部分库。
如果您要使用当前正在旧系统上运行的旧控件转换应用程序,要尝试的第一件事就是在新系统上安装该控件。即使您从来没有打算在 Visual Basic 6 中使用该系统,但如果您要重新使用任何控件就应该对其进行测试。这将有助于您提前了解兼容性问题。
最常见的控件是来自 Visual Basic 6 的 Web 浏览器控件。但是,Visual Basic 2005 中有一个新的 WebBrowser 控件,并且两者是兼容的。实际上,Visual Basic 2005 中有许多新控件可以转化为我们缺少的 Visual Basic 6 控件,尤其是接管 mscomm 的 SerialPort 控件。设计方面还有其他控件:
• | SoundPlayer |
• | DataGridView |
• | SplitContainer |
• | MaskedTextBox |
• | ToolStrip |
努力尝试查找不具有 .NET 程序集的 COM 控件,我将设法获得 ShockWave Flash 控件,如果您的系统中安装了 Flash Web Player,也会有该控件。还没有适用于该控件的 .NET 程序集,并且我认为它将是一个好的升级示例。问题是升级向导是否能够找到可以转换它的方式。
图 3:Flash 浏览器
我使用 Shockwave Flash OCX 控件(包括图 4 中的客户 slash 页面 flash)、一个文本框和一个按钮构建了一个简单的 Visual Basic 6 应用程序,并在 Visual Basic 2005 中对其进行转换。
正如预期的一样,Visual Basic 6 转换向导可以很好地转换组件,并生成控件的 .NET Interop。将 Ax 添加到 Interop 名称中以表明它是一个 ActiveX 驻留控件,该控件派生自 System.Windows.Forms。以下是转换和清理后我的项目所引用的控件:
• | AxInterop.ShockwaveFlashObjects(本地复制) |
• | System (GACed) |
• | System.Drawing (GACed) |
• | System.Windows.Forms (GACed) |
可以使用与转换向导使用 aximp 转换控件相同的方式来转换控件。Aximp 将 System.Web.Forms.AxHost 类用作 ActiveX 控件和 Windows Forms 容器之间的代理。如果您研究一下新的 ShockwaveFlashObjects 程序集的清单,就可以发现它确实派生自 AxHost。
.assembly AxInterop.ShockwaveFlashObjects { .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() .custom instance void [System.Windows.Forms]System.Windows.Forms.AxHost/TypeLibraryTimeStampAttribute::.ctor(string) .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) .hash algorithm 0x00008004 .ver 1:0:0:0 }
可以使用以下命令行亲自运行 aximp:
aximp c:\Windows\System32\Macromed\Flash\flash.ocx
AxHost 将包装 ActiveX 控件并将其公开为功能齐全的 Windows Forms 控件。不能直接使用该类,但是 aximp 使用它来生成我们正在查看的代理。在一定程度上,它是可以将 ActiveX 界面转换为 Windows Forms 界面的 Lego 片。
如果您签出了成员,则可以发现属性通常派生自 Control 类。AxHost 类的根本原因是接触 Win32 模型,并将属性转换为 .NET。经久不衰的面向对象编程。
没有人相信 Visual Basic 6 明天会消失。我有仍在运行全部 Visual Basic 6 基本代码的客户。当您要开始转移某些内容时,知道自己可能(仅是可能)无需重新编写每行代码是件令人愉快的事情。可以转换代码,可以包装控件。简而言之,有多种方式可以实现该操作。
是否理解了所有内容?转换前花时间清理一下 Visual Basic 6 代码。Code Advisor for Visual Basic 6 是帮助清理代码的极好工具。该工具需要安装 Visual Basic 6 (请记住,可以在一台计算机上同时安装 Visual Basic 2005 和 Visual Basic 6)。它将一个简单的工具条添加到 Visual Basic 中,注释代码以使用更新提示帮助您清理代码。
图 4:Code Advisor
它对代码的所做的更改简单、清晰并且可以管理。
列表 2:Code Advisor 标记控件示例
'FIXIT:使用显式选项以避免意外地创建 Variant 类型的变量 FixIT90210ae-R383-H1984 Private Sub Three_Change() If Len(Three.Text) = 3 Then Two.SetFocus End If End Sub Private Sub Two_Change() If Len(Two.Text) = 2 Then Four.SetFocus End If End Sub 'FIXIT:使用早期绑定数据类型声明“SocialSecurityNumber” FixIT90210ae-R1672-R1B8ZE Public Property Get SocialSecurityNumber() SocialSecurityNumber = Three.Text & _ "-" & Two.Text & "-" & Four.Text End Property
可以在此处下载 Code Advisor。
是否有其他可能需要在 Code Advisor 的帮助之外查找的更改?还有应该在几年前转移到用户控件的内容吗?难道那不是吗?可能您现在就非常感兴趣转移它。第三方控件呢?有 .NET 版本吗?如果没有,请尽快参阅 aximp 工具。做好规划是任何成功融合 Visual Basic 6 和 Visual Basic 2005 的关键,使用用户控件以及其他任何东西也是一样。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com
面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@evget.com
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢
慧都科技 版权所有 Copyright 2003-
2025 渝ICP备12000582号-13 渝公网安备
50010702500608号