`

(转)VB6迁移到VB.NET的一些问题汇总

    博客分类:
  • Work
阅读更多

    在工作中,可能会碰到需要将VB编写的代码迁移到VB.NET的情况,有好多细节需要处理。好在互联网发展了这么多年,好多问题在互联网上都有答案,所以需要的时候搜索一下就能解决。
    本人也碰到了从VB迁移到VB.NET的情况,现将碰到的问题及其解决方法或替代方法做一个总结,方便后来人。

    首先,建议看一下这篇英文文章《Converting VB6 to VB.NET》http://dotnet.sys-con.com/node/46335,讲述了一般的迁移步骤。
   
    其次,下载Microsoft Visual Basic Power Packs 并安装,这样在使用向导将VB6的代码迁移到VB.NET之后,能“消灭”不少编译错误。
    VB Power Packs 2.0 对应VS2005,本人没有找到下载地址。
    VB Power Packs 3.0 对应VS2008,下载地址:http://download.microsoft.com/download/1/2/A/12AA9B28-4F67-42C3-9319-684E8AD6F0AE/VisualBasicPowerPacks3Setup.exe
    据说VB Power Packs 10.0 已经发布了,感兴趣的读者请自行搜索。
   
    之后就是各种琐碎的问题,只能碰到一个,解决一个。
   
    问题:NewIndex 不是“System.Windows.Forms.ListBox”的成员
    方法一:
Dim x As Integer
x = ListBox.Items.Add(rsDates.Fields("fd").Value)
ListBox.SelectedIndex = x
    方法二:
    ListBox.Items.Add(rsDates.Fields("fd").Value)
ListBox.SelectedIndex=ListBox.Items.Count-1
   

    问题:If App.PrevInstance Then '   程序已经运行
    方法:If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length > 1 Then

    问题:Unload()
    方法:从理论上来讲,VB.NET有垃圾收集机制,所以不用主动的注销对象,直接注释掉就行(没有经过严格验证)

    问题:需要对程序集“mscomctl, Version=10.0.4504.0, Culture=neutral, PublicKeyToken……
    原因:引用了office控件
    方法:安装VS的“visual studio tools for Office”,安装Office200*的“.net可编程支持”
    更详细的资料:http://saber5d.blog.163.com/blog/static/12799877820098164556798/

    问题:PictureBox.cls()
    方法:PictureBox.Refresh()

    问题:DateTime.dateDiff()
    方法:DateAndTime.DateDiff()

    问题:在状态栏动态添加panel
    Dim x As Integer
    x = StatusBar.Panels.Count
    StatusBar.Panels.Add x, string1, string2
    StatusBar.Panels.Add x + 1, string1, string2
    升级向导将代码变为:
    StatusBar.Items.Add(New System.Windows.Forms.ToolStripStatusLabel(Integer, string1, string2))
    方法:手工修改为
    StatusBar.Items.Add(New System.Windows.Forms.ToolStripStatusLabel(string))
    StatusBar.Items.Item(StatusBar.Items.Count - 1).Text = string

    问题:“PaintPicture”不是“System.Windows.Forms.PictureBox”的成员。
    方法一:
Dim g As Graphics = Picture1.CreateGraphics()
g.DrawImage(pic, x, y)
    这种方法,每次PictureBox重绘的时候,图片会消失
    方法二:
        Private blankBitmap As Bitmap
        blankBitmap = New Bitmap(70 * 12, maxRow * 12)
        Picture1.Image = blankBitmap   
        Dim g As Graphics
        g = Graphics.FromImage(Picture1.Image)
        g.DrawImage(pic, x, y)
    这种方法,每次PictureBox重绘的时候,图片不会消失
 
    问题:LenB()
    方法一:
Public Function LenB(ByVal oString As String) As Integer
            Dim strArray() As Byte
            Dim Strlen As Integer
            Dim MyEncoder As System.Text.Encoding = System.Text.Encoding.Default
            strArray = MyEncoder.GetBytes(oString)
            Strlen = strArray.Length
            Return Strlen
        End Function
    方法二:
System.Text.Encoding.GetEncoding("GB2312").GetByteCount(strMsg)

    问题:VB6.LoadResPicture("pictureName", VB6.LoadResConstants.ResBitmap)
    方法:Me.BackgroundImage = My.Resources.bmpBCSSTART

    问题:on error ***
    建议:尽量替换成try catch

    问题:背景色
    如果某个按钮设置了背景色,尤其是在enter或leave事件中设置背景色,从VB6转到VB.NET之后,原来没有设置背景色的按钮,也会自动添加背景色
    方法:手动搜索代码,关键字“backgroundColor”,然后一一修改

    问题:同样的字体和字号,在VB6和VB.NET的界面上占的空间大小有细微差别
    方法:把所有界面都检查一遍

    问题:TAB页使用了ActiveX控件xxx
    解决:替换成.net中的TAB页

    问题:Base64编码与解码
    方法:
    编码
        Dim x As Byte()
         x = System.Text.Encoding.ASCII.GetBytes(s)
        Encrypt = Convert.ToBase64String(x)
    解码
        Dim x As Byte()
        x = Convert.FromBase64String(s)
        Decrypt = System.Text.Encoding.ASCII.GetString(x)

    问题:某个对话框框一闪而过
    方法:将Form_Activated中的代码转移到Form_load中,将Form_Activated注释掉

    问题:将ICO转为bmp
        VB6.ImageToIPictureDisp(VB6.LoadResPicture("ico", 1))
    方法:My.Resources.ico***.ToBitmap()

    问题:窗体居中
    方法:设置窗体的属性即可

    问题:访问数据库时,IsNull()
    方法:isDBNull()
 
    问题: data report
    方法: 替换成crystal report、RDLC及其他报表控件,需要重写代码
   
    其他参考文章
    阿泰总结的一些问题: VB6向VB.Net2005迁移相关知识 

分享到:
评论

相关推荐

    转换VB6窗体到VB.NET源代码

    "转换VB6窗体到VB.NET源代码"这个主题涉及的是将VB6应用程序迁移到VB.NET平台的过程,以便利用.NET Framework提供的先进特性和功能。在这个过程中,我们需要了解多个关键知识点: 1. **VB6与VB.NET的区别**:VB.NET...

    从vb6升级到vb.net

    - **升级意义**:将旧的应用程序从VB6迁移到VB.NET,不仅可以充分利用.NET框架的强大功能,还能享受到诸如自动部署、更好的面向对象支持以及更高效的代码执行等优势。 #### 二、语言特性和工具的重大变化 - **面向...

    VB.Net2010VB6转VB.Net(高清视频+源码).zip

    总的来说,"VB.Net 2010 VB6 转 VB.Net" 的学习资源对于那些希望从 VB6 过渡到 VB.Net 开发的程序员来说非常有价值。通过观看高清视频教程,结合实际的源码练习,能够快速掌握 VB.Net 的核心概念和实践技巧。同时,...

    C#代码项目转换VB.NET项目代码(可整个项目转换)

    C#和VB.NET都是.NET框架下的编程语言,它们有着相似的语法基础,但由于历史和设计哲学的不同,两者之间存在一些差异。当一个项目由C#编写,而团队或后续维护者更熟悉VB.NET时,进行代码转换就显得尤为必要。本篇将...

    VB.NET转JAVA工具

    VB.NET转JAVA工具的出现,主要是为了帮助开发者将已有的VB.NET项目迁移到Java环境中,或者便于那些熟悉VB.NET语法但需要在Java平台上工作的开发者。这个工具包含说明文档和源代码,意味着用户不仅可以直接使用转换...

    vb.net.zip_VB.NET 控件_vb.net_vb.net excel_vb.net 控件_vb.net控件

    由于VB.NET和VB6在语法和架构上有显著差异,这种转换过程可能涉及代码迁移、库引用更新以及UI控件替换。 4. **smtp_server.zip**:SMTP(Simple Mail Transfer Protocol)服务器是用于发送电子邮件的标准。这个文件...

    VB.NET.rar_.net 教程_VB.net教程_Visual Basic.Net_vb.net_vb.net 实例

    《VB.NET教程——Visual Basic .NET深度学习指南》 Visual Basic .NET(简称VB.NET)是微软公司推出的面向对象的编程语言,它是.NET框架的一部分,为开发者提供了强大的开发工具和丰富的功能,尤其适合快速应用程序...

    C#转换成vb.net工具

    这个工具的目的是帮助程序员在两种.NET框架下的语言之间进行快速的代码迁移,尤其对于那些熟悉C#但需要处理VB.NET项目的人来说非常实用。 描述中提到,该软件解压后运行"ConvertCSharp2VB.exe"即可开始使用。用户只...

    C# vb.NET互转工具 CS_VBConverter

    《C#与VB.NET代码互转工具:CS_VBConverter深度解析》 在.NET框架下,C#和VB.NET作为两种主要的编程语言,各有其优势和特点。开发者们有时会因为项目需求或个人习惯,需要在两者之间进行代码转换。这时,一个高效...

    VB.Net to C# Converter将VB代码转换成C#代码

    《VB.Net to C# Converter:实现编程语言间的无缝迁移》 在编程世界中,不同的编程语言各有其特色和优势,而开发人员有时需要在不同语言间进行切换。VB.Net(Visual Basic .NET)和C#是.NET框架下的两种主要编程...

    VB.Net_Camera.rar_VB.NET 摄像头_vb.net 拍照_vb.net 摄像头_vb.net摄像头

    VB.NET提供了一些系统API,如`System.Device.Location`,可以帮助识别和选择可用的摄像头。 总结起来,"VB.Net_Camera.rar"项目主要涵盖了VB.NET环境下访问和控制摄像头的基本技术,包括摄像头的访问、图像捕获、...

    VB.NET2010_MODBUS.zip_VB MODBUS_modbus vb_vb modbus_vb.net RS4

    在VB.NET 2010环境下,MODBUS通信是一个常用的技术,用于设备间的数据交换,特别是在工业自动化领域。本项目是作者初次尝试使用VB.NET 2010实现RS485 MODBUS通信,这对于初学者或者需要进行MODBUS协议编程的开发者来...

    VB.Net to C# Converter 代码转换工具

    VB.Net与C#是两种广泛使用的.NET框架编程语言。VB.Net以其简洁明了的语法吸引了不少开发者,而C#则以其强大的功能和面向对象的特性备受赞誉。在实际开发过程中,有时由于团队技术栈的调整或者项目需求,可能需要将已...

    C# VB.NET VB6之间通信

    VB6不支持.NET框架的许多高级功能,但可以通过一些方式与.NET应用交互。 C#、VB.NET和VB6之间的通信主要通过以下几种方式实现: 1. COM(Component Object Model)组件:COM是微软提供的一种跨语言的接口标准,...

    C#代码转换为VB.NET代码的工具

    总之,"C#代码转换为VB.NET代码的工具"是.NET开发者不可或缺的辅助工具,它简化了不同编程语言间的代码迁移过程,提升了开发效率,降低了理解新语言的门槛。对于熟悉C#并需要涉足VB.NET项目的开发者来说,这款工具...

    VB.NET C# 互转 Convert

    本文将深入探讨如何在VB.NET与C#之间进行互转,并介绍一些实用的工具和技术。 首先,VB.NET(Visual Basic .NET)是一种面向对象的编程语言,由微软公司开发,用于构建Windows应用程序、Web应用以及服务。它的语法...

    vb.netQQ.rar_ vb.netQQ_QQ Vb.NET_VB .net_VB.NET ICQ_vb.net

    .net vb.net_icq vb.net" 标签中的关键词揭示了项目的关键技术点,包括与QQ相关的开发(vb.netqq)、使用VB.NET进行QQ客户端开发(qq_vb.net)、VB.NET编程(vb_.net、vb.net)、以及可能涉及到的VB.NET实现ICQ(vb...

    VB.NET识别二维码.rar_poemjoe_vb 二维码_vb.net_二维码vb.net_二维码识别

    它支持多种格式的条形码和二维码,包括QR Code,能够很好地集成到VB.NET项目中。 2. **ZXing.Net库的引入** 首先,需要在项目中添加ZXing.Net的引用。这可以通过NuGet包管理器完成,搜索"ZXing.Net"并安装相应的包...

    VB.NET-ico图标转换.zip

    在.NET框架中,VB.NET(Visual Basic .NET)是一种面向对象的编程语言,它提供了丰富的功能和工具,用于创建各种类型的Windows应用程序。本资源“VB.NET-ico图标转换.zip”包含了一个VB.NET项目的源代码,专门用于...

    VB转 VB.net 5

    【VB转VB.NET知识点】 1. 参数修饰符的差异: 在VB6中,`ByVal`和`ByRef`用于指定参数传递方式...在从VB6迁移到VB.NET的过程中,理解这些核心概念和差异至关重要,可以帮助开发者顺利过渡,并充分利用新平台的功能。

Global site tag (gtag.js) - Google Analytics