zoukankan      html  css  js  c++  java
  • VB6迁移到VB.NET的一些问题汇总

        在工作中,可能会碰到需要将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迁移相关知识 
  • 相关阅读:
    日期格式不合法
    DataGridView的Scrollbar通過編程不能自動下滾
    Sourcesafe shadown backup
    共享目錄突然不工作 
    VS2005編譯后版本如何控制
    WebBrowser用作RichTextBox
    怎樣設定MS Reporting自動橫向列印
    VSS 2005不需登錄,直接開啟的方法
    subreport cannot be shown
    An Algorithm Summary of Programming Collective Intelligence (5)
  • 原文地址:https://www.cnblogs.com/ols/p/1692297.html
Copyright © 2011-2022 走看看