新聞中心
Visual Basic相信是很多程序員接觸的第一個(gè)開發(fā)環(huán)境,當(dāng)然多年后想遷移到Visual Basic.NET還是需要一定的處理工作的。本文將為大家介紹遷移的過程。向您推薦《VB.NET教程 - Visual Basic.NET開發(fā)指南》

在工作中,可能會(huì)碰到需要將VB編寫的代碼遷移到VB.NET的情況,有好多細(xì)節(jié)需要處理。好在互聯(lián)網(wǎng)發(fā)展了這么多年,好多問題在互聯(lián)網(wǎng)上都有答案,所以需要的時(shí)候搜索一下就能解決。
本人也碰到了從VB遷移到VB.NET的情況,現(xiàn)將碰到的問題及其解決方法或替代方法做一個(gè)總結(jié),方便后來人。
首先,建議看一下這篇英文文章《Converting VB6 to VB.NET》http://dotnet.sys-con.com/node/46335,講述了一般的遷移步驟。
其次,下載Microsoft Visual Basic Power Packs 并安裝,這樣在使用向?qū)B6的代碼遷移到VB.NET之后,能“消滅”不少編譯錯(cuò)誤。
VB Power Packs 2.0 對(duì)應(yīng)VS2005,本人沒有找到下載地址。
VB Power Packs 3.0 對(duì)應(yīng)VS2008,下載地址:http://download.microsoft.com/download/1/2/A/12AA9B28-4F67-42C3-9319-684E8AD6F0AE/VisualBasicPowerPacks3Setup.exe
據(jù)說VB Power Packs 10.0 已經(jīng)發(fā)布了,感興趣的讀者請(qǐng)自行搜索。
之后就是各種瑣碎的問題,只能碰到一個(gè),解決一個(gè)。
問題: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 ' 程序已經(jīng)運(yùn)行
方法:
- If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length > 1 Then
問題:Unload()
方法:從理論上來講,VB.NET有垃圾收集機(jī)制,所以不用主動(dòng)的注銷對(duì)象,直接注釋掉就行(沒有經(jīng)過嚴(yán)格驗(yàn)證)
問題:需要對(duì)程序集“mscomctl, Version=10.0.4504.0, Culture=neutral, PublicKeyToken……
原因:引用了office控件
方法:安裝VS的“visual studio tools for Office”,安裝Office200*的“.net可編程支持”
更詳細(xì)的資料:http://saber5d.blog.163.com/blog/static/12799877820098164556798/
問題:PictureBox.cls()
方法:PictureBox.Refresh()
問題:DateTime.dateDiff()
方法:DateAndTime.DateDiff()
問題:在狀態(tài)欄動(dòng)態(tài)添加panel
- Dim x As Integer
- x = StatusBar.Panels.Count
- StatusBar.Panels.Add x, string1, string2
- StatusBar.Panels.Add x + 1, string1, string2
升級(jí)向?qū)⒋a變?yōu)椋?/p>
- 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重繪的時(shí)候,圖片會(huì)消失
方法二:
- 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重繪的時(shí)候,圖片不會(huì)消失
問題: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
問題:背景色
如果某個(gè)按鈕設(shè)置了背景色,尤其是在enter或leave事件中設(shè)置背景色,從VB6轉(zhuǎn)到VB.NET之后,原來沒有設(shè)置背景色的按鈕,也會(huì)自動(dòng)添加背景色
方法:手動(dòng)搜索代碼,關(guān)鍵字“backgroundColor”,然后一一修改
問題:同樣的字體和字號(hào),在VB6和VB.NET的界面上占的空間大小有細(xì)微差別
方法:把所有界面都檢查一遍
問題: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)
問題:某個(gè)對(duì)話框框一閃而過
方法:將Form_Activated中的代碼轉(zhuǎn)移到Form_load中,將Form_Activated注釋掉
問題:將ICO轉(zhuǎn)為bmp
VB6.ImageToIPictureDisp(VB6.LoadResPicture("ico", 1))
方法:My.Resources.ico***.ToBitmap()
問題:窗體居中
方法:設(shè)置窗體的屬性即可
問題:訪問數(shù)據(jù)庫時(shí),IsNull()
方法:isDBNull()
問題: data report
方法: 替換成crystal report、RDLC及其他報(bào)表控件,需要重寫代碼
其他參考文章
阿泰總結(jié)的一些問題: VB6向VB.Net2005遷移相關(guān)知識(shí)
新聞名稱:老生常談如何從VB6遷移到VB.NET及相關(guān)問題
文章鏈接:http://www.dlmjj.cn/article/dhsjips.html


咨詢
建站咨詢
