`

(转)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迁移相关知识 

分享到:
评论

相关推荐

    程序员大本营-VB文档总汇

    10. **VB6与.NET框架**:尽管VB6与.NET Framework的VB.NET有很大的不同,但了解.NET框架的基础知识,可以帮助VB6开发者向更现代的技术栈迁移。 “VB中文文章汇总”和“VB英文文章汇总”可能包含各种教程、案例分析...

    VB60SP6-KB926857-x86-CHS VB 6.0 SP 6 安全汇总更新

    尽管如此,用户应意识到未来可能不再有新的安全更新,因此需要考虑迁移至更现代的开发环境,如.NET Framework或Visual Studio,以获取更好的安全性和技术支持。 总之,VB60SP6-KB926857-x86-CHS是Visual Basic 6.0...

    asp.net知识库

    ASP.NET是一个服务器端的开发环境,它可以将HTML、CSS、JavaScript等客户端技术与C#、VB.NET等服务器端语言结合,用于构建功能强大的Web应用。ASP.NET页面生命周期包括初始化、加载、验证、呈现和卸载等阶段,理解...

    基于VB的汽车销售管理系统源码.zip

    同时,考虑未来可能的技术迁移,如从VB到.NET Framework的升级,系统设计时应具备一定的前瞻性。 总之,基于VB的汽车销售管理系统源码是一个实践性强、理论知识丰富的项目,涵盖了软件工程中的需求分析、设计、编码...

    FastReport_.NET_NetFx2-NetFx4_2019.3.5_Downloadly.ir.rar

    它支持多种编程语言,如C#、VB.NET和Delphi,使得开发人员能够在他们的应用中轻松集成报表功能。 FastReport .NET的核心特性包括: 1. **用户友好的设计器**:FastReport .NET提供了类似Microsoft Word的报表设计...

    ExcelTest程序

    6. **错误处理与日志记录**:为了保证程序的健壮性,需要设置适当的错误处理机制,捕获可能出现的异常,并记录日志以便后续排查问题。 7. **安全性与权限管理**:在将数据存入数据库后,可能需要设定访问权限,限制...

    NET学生成绩管理系统

    1. **.NET框架**:该系统基于.NET框架构建,这是由微软开发的一个全面的开发平台,支持多种语言如C#、VB.NET等。.NET框架提供了丰富的类库,使得开发人员可以快速构建功能强大的应用程序。 2. **Visual Studio 2005...

    初级Windows扩展版办公自动化考试系统.pptx

    该系统经历了从有纸有盘、有纸无盘到无纸无盘的发展过程,早期采用VB6编写,后来为了提高运行效率改用C++,起初基于Windows 98 + Office 2000平台。随着技术进步,现在考试系统已迁移到.NET 2.0平台,使用C#编程语言...

Global site tag (gtag.js) - Google Analytics