Visual Basic相信是不少程序員接觸的第一個開發環境,固然多年後想遷移到Visual Basic.NET仍是須要必定的處理工做的。本文將爲你們介紹遷移的過程。51CTO向您推薦《VB.NET教程 - Visual Basic.NET開發指南》
在工做中,可能會碰到須要將VB編寫的代碼遷移到VB.NET的狀況,有好多細節須要處理。好在互聯網發展了這麼多年,好多問題在互聯網上都有答案,因此須要的時候搜索一下就能解決。 本人也碰到了從VB遷移到VB.NET的狀況,現將碰到的問題及其解決方法或替代方法作一個總結,方便後來人。
首先,建議看一下這篇英文文章《Converting VB6 to VB.NET》講述了通常的遷移步驟。
其次,下載Microsoft Visual Basic Power Packs 並安裝,這樣在使用嚮導將VB6的代碼遷移到VB.NET以後,能"消滅"很多編譯錯誤。
聽說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可編程支持"
問題: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)
更多http://www.cnblogs.com/yeilsoiaisn/
問題:某個對話框框一閃而過
方法:將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及其餘報表控件,須要重寫代碼程序員