您现在的位置: 中国男护士网 >> 考试频道 >> 计算机等级 >> 二级辅导 >> VB >> 真题 >> 正文    
  VB6和VB2005中的用户界面控件 【注册男护士专用博客】          

VB6和VB2005中的用户界面控件

www.nanhushi.com     佚名   不详 

  VB6 和 VB2005 中的用户界面控件。本文将向大家介绍如何轻松高效地将 Visual Basic 6 用户界面控件转换到 Visual Basic 2005 中。

  简介

  在进行 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 中构建了一个小型用户控件(仅实现了用于输入美国社会安全号码的三个文本框)。我将使用一些技巧,进行一些设置以查看转换向导的工作方式。

  我将使用 TextChanged 事件,以在文本框具有正确的字符数时在它们之间自动切换。我将该事件驻留在一个简单的窗体中(该窗体只是在消息框中显示结果),并通过转换向导运行该事件。这是一个相当简单的过程:只需在 Visual Studio 2005 中使用“文件”->“打开项目...”菜单项来打开 Visual Basic 6 项目。

  令人高兴的是 Visual Basic 2005 可以非常出色地对其进行处理。向导可以正确地以 Visual Basic 2005 格式创建窗体和用户控件。甚至还添加了 ToolTip ExtenderProvider,以支持默认情况下 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 应用程序中运行。

  使用 ActiveX 控件和 Windows 控件库

  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 文件。

  实际上,Visual Studio 足以胜任将控件添加到解决方案的其他项目中。这是拖放操作,就像操作内置控件一样!

  升级 OCX、DLL 和第三方控件

  假如您有一个 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 程序集,并且我认为它将是一个好的升级示例。问题是升级向导是否能够找到可以转换它的方式。

  我使用 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 中,注释代码以使用更新提示帮助您清理代码。

  它对代码的所做的更改简单、清晰并且可以管理。

  列表 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 的关键,使用用户控件以及其他任何东西也是一样。

 

文章录入:杜斌    责任编辑:杜斌 
  • 上一篇文章: 没有了

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     

    联 系 信 息
    QQ:88236621
    电话:15853773350
    E-Mail:malenurse@163.com
    免费发布招聘信息
    做中国最专业男护士门户网站
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    专 题 栏 目

      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)                            【进男护士社区逛逛】
    姓 名:
    * 游客填写  ·注册用户 ·忘记密码
    主 页:

    评 分:
    1分 2分 3分 4分 5分
    评论内容:
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。