老生常谈 如何从VB6迁移到VB.NET及相关问题

开发 后端
从VB6迁移到Visual Basic.NET其实会遇到不少问题,既然我们决定从经典的VB6迁出,那么势必要首先了解下VB.NET

Visual Basic相信是很多程序员接触的第一个开发环境,当然多年后想迁移到Visual Basic.NET还是需要一定的处理工作的。本文将为大家介绍迁移的过程。51CTO向您推荐《VB.NET教程 - Visual Basic.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”的成员

方法一:

  1. Dim x As Integer 
  2. x = ListBox.Items.Add(rsDates.Fields("fd").Value)  
  3. ListBox.SelectedIndex = x 

方法二:

  1. ListBox.Items.Add(rsDates.Fields("fd").Value)  
  2. ListBox.SelectedIndex=ListBox.Items.Count-1 

问题:If App.PrevInstance Then '   程序已经运行

方法:

  1. 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

  1. Dim x As Integer 
  2. x = StatusBar.Panels.Count  
  3. StatusBar.Panels.Add x, string1, string2  
  4. StatusBar.Panels.Add x + 1, string1, string2 

升级向导将代码变为:

  1. StatusBar.Items.Add
  2. (New System.Windows.Forms.ToolStripStatusLabel(Integer, string1, string2)) 

方法:手工修改为

  1. StatusBar.Items.Add
  2. (New System.Windows.Forms.ToolStripStatusLabel(string))  
  3. StatusBar.Items.Item(StatusBar.Items.Count - 1).Text = string 

问题:“PaintPicture”不是“System.Windows.Forms.PictureBox”的成员。

方法一:

  1. Dim g As Graphics = Picture1.CreateGraphics()  
  2. g.DrawImage(pic, x, y) 

这种方法,每次PictureBox重绘的时候,图片会消失

方法二:

  1. Private blankBitmap As Bitmap  
  2. blankBitmap = New Bitmap(70 * 12, maxRow * 12)  
  3. Picture1.Image = blankBitmap  
  4. Dim g As Graphics  
  5. g = Graphics.FromImage(Picture1.Image)  
  6. g.DrawImage(pic, x, y) 

这种方法,每次PictureBox重绘的时候,图片不会消失

问题:LenB()

方法一:

  1. Public Function LenB(ByVal oString As StringAs Integer 
  2. Dim strArray() As Byte 
  3. Dim Strlen As Integer 
  4. Dim MyEncoder As System.Text.Encoding = System.Text.Encoding.Default 
  5. strArray = MyEncoder.GetBytes(oString)  
  6. Strlen = strArray.Length  
  7. Return Strlen  
  8. 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编码与解码

方法:

编码

  1. Dim x As Byte()  
  2.  x = System.Text.Encoding.ASCII.GetBytes(s)  
  3. Encrypt = Convert.ToBase64String(x) 

解码

  1. Dim x As Byte()  
  2. x = Convert.FromBase64String(s)  
  3. 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的一些问题汇总

链接:http://www.cnblogs.com/ols/archive/2010/03/23/1692297.html

【编辑推荐】

  1. VB.NET和C#逐层横向对比
  2. VB.NET和C#的发展与动态语言运行时
  3. 用VB.NET 2008编写数据查询窗体
  4. VB6实现MUI程序方法详解
  5. 详解VB.NET中鼠标滚轮的实际应用

 

责任编辑:彭凡 来源: 博客园
相关推荐

2015-07-21 13:39:58

Javascript作用域

2009-11-03 17:31:01

VB.NET窗体

2010-01-12 17:54:42

VB.NET Dlli

2015-06-25 10:46:23

数据中心节能

2010-01-11 18:05:24

VB.NET窗体继承

2012-02-13 09:46:56

数据中心耗能服务器虚拟化

2010-01-15 13:52:42

VB.NET属性设置

2010-01-11 15:01:55

VB.NET冒泡排序

2010-01-19 17:26:37

VB.NET创建过程

2010-01-13 17:16:37

VB.NET冒号

2009-10-29 14:02:24

VB和VB.NET比较

2009-10-09 17:40:38

VB.Net问题集

2015-04-08 11:50:07

数据加密数据泄露

2010-01-11 13:33:07

VB.NET使用数组

2010-01-19 15:08:18

VB.NET对象成员

2009-10-10 17:36:47

VB转型到VB.NET

2009-11-02 17:12:01

VB和VB.NET

2010-01-22 17:55:23

VB.NET语法糖

2009-11-10 15:18:35

VB.NET封面

2010-01-13 18:09:09

VB.NET动态生成代
点赞
收藏

51CTO技术栈公众号