小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VB6?And?VB.NET

 filedot 2011-11-23

VB6 And VB.NET

(2011-03-02 23:38:21)
標(biāo)簽:

雜談

總覽:
    本文推薦給那些準(zhǔn)備將自己的應(yīng)用移植到Visual Basic.NET中的Visual Basic開發(fā)者。文章中包括
Visual Basic.NET升級(jí)工具的信息的介紹以及將Visual Basic 6結(jié)構(gòu)平滑升級(jí)到Visual Basic.NET 的指導(dǎo)
    在打開Visual Basic 6.0工程時(shí)Visual Basic.NET會(huì)自動(dòng)升級(jí),但是在絕大多數(shù)情況下你需要對(duì)在Visual
Basic.NET下打開的Visual Basic 6.0程序做一些改動(dòng)。這篇文章的用途就是時(shí)你對(duì)原來(lái)的程序的改動(dòng)盡可能的
少以及有效。
注:Visual Basic.NET仍然處于開發(fā)中,所以下面的一些細(xì)節(jié)可能還會(huì)有改動(dòng),下面的指導(dǎo)不保證在最終的產(chǎn)品出
來(lái)后代碼不需要改動(dòng)。


什么是Visual Basic.NET?
    Visual Basic.NET是下一代的Visual Basic。而并不是簡(jiǎn)單的在Visual Basic 6.0上在添加一些新特性而已,
微軟重新設(shè)計(jì)了產(chǎn)品以便使開發(fā)者能夠更加容易的開發(fā)分布式應(yīng)用,例如基于WEB的程序以及多層系統(tǒng)。
    Visual Basic.NET中有兩種窗體包,Windows窗體以及Web窗體;一個(gè)新版的ADO用于接受離線數(shù)據(jù)源;新的語(yǔ)
言,移走了原來(lái)的關(guān)鍵字,提高Type數(shù)據(jù)的安全性以及提供低級(jí)別結(jié)構(gòu)以滿足高級(jí)別開發(fā)者的需求。
    這些新的特性為Visual Basic開發(fā)者提供了新的開發(fā)窗口:通過(guò)Web窗體以及ADO.NET,你可以快速開發(fā)可擴(kuò)展
的Web站點(diǎn);通過(guò)繼承,該語(yǔ)言實(shí)現(xiàn)了真正的支持面向?qū)ο缶幊蹋╫bject-oriented programming);Windows窗體
本身支持可視繼承;現(xiàn)在展開程序就象拷貝可執(zhí)行文件和控件到另一個(gè)目錄那樣簡(jiǎn)單。
    Visual Basic.NET現(xiàn)在完全集成在其它的Microsoft Visual Studio .NET語(yǔ)言中,不僅可以通過(guò)不同的語(yǔ)言
開發(fā)組件,而且通過(guò)交叉語(yǔ)言繼承,你可以從用一種語(yǔ)言編寫的類中派生用另一種語(yǔ)言編寫的類。

為什么Visual Basic.NET不提供100%的繼承性?
    當(dāng)在設(shè)計(jì)Visual Basic.NET時(shí)有兩個(gè)方向:翻新以及完全新建。為了體供給用戶盡可能多的新特性(例如繼
承以及線程),為了提供對(duì)新平臺(tái)的完全訪問(wèn),以及為了使Visual Basic能夠完全轉(zhuǎn)移到下一代的Web應(yīng)用中。正
確的選擇是完全新建。

    例如,很多在Windows窗體中的新特性可以通過(guò)在現(xiàn)有的代碼中添加新控件以及屬性來(lái)實(shí)現(xiàn)。但是這樣就會(huì)犧
牲新的Windows窗體的很多內(nèi)在特性,例如安全以及可視繼承性。

    一個(gè)重要的目標(biāo)是使Visual Basic代碼可以完全集成到用其它語(yǔ)言編寫的代碼中,例如Microsft C#(讀C Sharp)
或者Visual C++。以及讓Visual Basic開發(fā)者可以完全而且簡(jiǎn)單利用.NET框架的功能,而不需要象原來(lái)那樣使用
Windows API調(diào)用。所有的Visual語(yǔ)言將與其它面向通用運(yùn)行時(shí)語(yǔ)言(Common Language Runtime)的語(yǔ)言使用相同
的數(shù)據(jù)定義類型、數(shù)組、用戶自定義數(shù)組、類以及界面。不過(guò)這樣就要做一些犧牲,例如固定長(zhǎng)度字符串以及以非
0數(shù)為下界的數(shù)組將不再被支持。

    Visual Basic現(xiàn)在已經(jīng)成為一個(gè)真正面向?qū)ο笳Z(yǔ)言,一些不一致的特性,例如 GoSub/Return語(yǔ)句以及DefInt
已經(jīng)從新語(yǔ)言中移走了。
    這樣的結(jié)果是使Visual Basic更加具有活力,使其成為一種開發(fā)基于Windows應(yīng)用的最有效的工具之一,同時(shí)
也是開發(fā)下一代的Web站點(diǎn)的最佳工具。

升級(jí)到Visual Basic.NET
    Visual Basic.NET原則上可以使傳統(tǒng)的Windows開發(fā)者轉(zhuǎn)移到建立下一代Web以及多層應(yīng)用中。所以,你的代碼
需要升級(jí)以適應(yīng)Visual Basic.NET
    在你使用Visual Basic.NET打開Visual Basic 6.0工程后,通過(guò)自動(dòng)升級(jí)工具可以一步步的升級(jí)并建立一個(gè)新
的基于Visual Basic.NET的工程。這個(gè)升級(jí)是單向的,既新的Visual Basic.NET工程無(wú)法再在Visual Basic 6.0中
打開。
    當(dāng)工程升級(jí)后,Visual Basic.NET會(huì)修改語(yǔ)法的改變以及將Visual Basic 6.0窗體轉(zhuǎn)換為Windows窗體。在通
常情況下,你還需要手工做一些修改,因?yàn)樽詣?dòng)升級(jí)工具不可能替你做所有的事情。
    為幫助改變?cè)瓉?lái)代碼,當(dāng)你的工程升級(jí)以后,Visual Basic.NET會(huì)在工程中添加“升級(jí)報(bào)告”列出所有的問(wèn)題,
同時(shí)在代碼中添加注釋提示你需要做的改動(dòng),這些注釋會(huì)以“TO DO”列表形式列出在任務(wù)列表窗口中,所以你可
以很容易的需要改變的部分,要想瀏覽相關(guān)的代碼只需要雙擊任務(wù)列表中的相關(guān)項(xiàng)就可以了。每一個(gè)任務(wù)以及升級(jí)
報(bào)告中的列表項(xiàng)都有相關(guān)的在線幫助標(biāo)題以給你更多的幫助。

讓Visual Basic 6.0和Visual Basic.NET同時(shí)工作
    Visual Basic.NET支持升級(jí)Visual Basic 6.0生成的工程,如果你的工程是在VB 1-5下編寫的,你需要首先升
級(jí)道Visual Basic 6.0工程,編譯、保存后再升級(jí)到Visual Basic.NET。
    Visual Basic.NET和Visual Basic 6.0可以安裝在同一系統(tǒng)下并可以同時(shí)運(yùn)行。同樣的,利用較早版本或者其
它語(yǔ)言編寫的COM組件也可以集成到Visual Basic.NET中。例如你可以拖-放一個(gè)Visual Basic 6.0編寫的ActiveX
控件到Visual Basic.NET的Windows窗體中,在Visual Basic.NET的類中使用Visual Basic 6.0的COM組件。
    Visual Basic.NET編譯的組件同Visual Basic 6.0編譯的組件有一點(diǎn)點(diǎn)的不同,Visual Basic.NET對(duì)象是通過(guò)
垃圾收集方式釋放的,所以在對(duì)象被刪除到對(duì)象真正被從內(nèi)存中釋放之間或許會(huì)有一定的延遲。
    另外,Visual Basic.NET提供了Visual Basic.NET組件同Visual Basic 6.0之間的二進(jìn)制兼容性。現(xiàn)在展開一
個(gè)組件變的比以往更加容易,配置一個(gè)組件文件只需要簡(jiǎn)單的拷貝文件到目錄就可以了(不需要regsvr32)。將組
件升級(jí)到新版本之需要以新文件覆蓋就文件就可以了。你所要做的只是確定新組件的類同方法同舊組件兼容。


結(jié)構(gòu)介紹
    .NET平臺(tái)提升了上一個(gè)版本平臺(tái)的結(jié)構(gòu),對(duì)于應(yīng)用的可伸縮性和分布特性提供了更好的支持。例如離線數(shù)據(jù)訪
問(wèn)、基于HTTP的消息傳遞文件配置。要獲得以上特性,你需要使用Visual Basic.NET。


基于瀏覽器的應(yīng)用
Visual Basic 6.0和Visual Studio 6提供了以下的技術(shù)用于建立基于瀏覽器的Internet和Intranet應(yīng)用:
Webclasses
DHTML projects
ActiveX documents
Active Server Pages (ASP)

    Visual Basic.NET中引入了ASP.NET,ASP.NET是增強(qiáng)版的ASP,并加入到了Web窗體(Web Forms)結(jié)構(gòu)中,Web
窗體是.NET架構(gòu)中非常重要的一個(gè)組成部分。一個(gè)Web窗體包含兩個(gè)部分:HTML文件和源程序文件。HTML文件用于
描述頁(yè)面;源程序文件用于響應(yīng)、控制頁(yè)面事件。建立一個(gè)Web窗體同現(xiàn)在建立一個(gè)VisualBasic窗體一樣簡(jiǎn)單。
它的WYSIWYG 界面設(shè)計(jì)方式同現(xiàn)在的Visual Basic是一樣的。下面的圖片演示了一個(gè)Web窗體的設(shè)計(jì):

    Web窗體運(yùn)行于服務(wù)器上,產(chǎn)生基于HTML3.2標(biāo)準(zhǔn)的HTML頁(yè)面發(fā)送到客戶端。這一點(diǎn)同ASP相同,但是由于Web程
序是編譯執(zhí)行的,同解釋執(zhí)行的ASP比較起來(lái)速度要快很多。

    下面是對(duì)將Visual Basic 6.0開發(fā)的基于瀏覽器的應(yīng)用無(wú)縫轉(zhuǎn)移到Visual Basic.NET上的一些介紹以及結(jié)構(gòu)方
面的建議。

    我們建議你使用微軟多層構(gòu)架來(lái)開發(fā)你的應(yīng)用,利用ASP來(lái)開發(fā)界面,同時(shí)使用Visual Basic 6.0或者Visual
C++ 6.0開發(fā)的COM組件,Visual Basic.NET完全支持ASP,你可以同時(shí)使用ASP、ASP.NET、Web窗體來(lái)擴(kuò)展你的應(yīng)用。
同時(shí)Visual Basic 6.0或者VC6商用組件可以不經(jīng)升級(jí)獲修改直接在Visual Basic.NET中使用。

    包含DHTML頁(yè)面以及客戶端DLL的DHTML 應(yīng)用不能自動(dòng)升級(jí)到Visual Basic.NET。我們建議你在Visual Basic
6.0下開發(fā)這些應(yīng)用。同DHTML工程一樣,ActiveX Documents不被Visual Basic.NET支持。不能自動(dòng)升級(jí)。我們建
議:或者在Visual Basic 6.0下開發(fā)ActiveX Documents或者將ActiveX Documents轉(zhuǎn)換為用戶自定義控件。不過(guò)
ActiveX documents 和 DHTML應(yīng)用程序可以集成到Visual Basic.NET技術(shù)中。

    Web類(Webclasses)在Visual Basic.NET中將不再存在。Web類應(yīng)用將升級(jí)到ASP.NET;不過(guò),在自動(dòng)升級(jí)后
你還需要做一些更改?,F(xiàn)存的Web類應(yīng)用可以集成到Visual Basic.NET的Web窗體和ASP應(yīng)用中,但是在新工程中,
我們建議在新工程中使用ASP的Windows DNA平臺(tái)。關(guān)于更多的關(guān)于Windows DNA的信息,請(qǐng)?jiān)L問(wèn)微軟DNA站點(diǎn):
http://msdn.microsoft.com/isapi/gomscom.as...sp?Target=/dna/

客戶/服務(wù)器工程
Visual Basic 6.0提供以下技術(shù)用于建立客戶端/服務(wù)器應(yīng)用:
Visual Basic窗體
Microsoft Transaction Server (MTS)/COM+中間層對(duì)象
用戶控件

    Visual Basic.NET提供了新的窗體包:Windows窗體。相對(duì)于Visual Basic 6.0的窗體,Windows窗體使用不同
的對(duì)象模塊,不過(guò)絕大部分是兼容的。當(dāng)你的工程升級(jí)時(shí),Visual Basic窗體自動(dòng)升級(jí)到Windows窗體。下面是
Windows窗體的示例:

    對(duì)于開發(fā)中間層的MTS and COM+ 服務(wù)器組件,Visual Basic.NET提供了更強(qiáng)大的支持。使用統(tǒng)一的調(diào)試器,
你可以從 客戶端到MTS/COM+組件再到客戶端進(jìn)行步進(jìn)調(diào)試。同時(shí)集成調(diào)試器也支持在MTS 和 COM+ 組件內(nèi)部進(jìn)行
調(diào)試(組件需要以native code方式編譯,包含符號(hào)調(diào)試信息以及不進(jìn)行優(yōu)化)。

    Visual Basic.NET同樣也提供了新的中間層組件:Web Services(Web服務(wù)器)。Web服務(wù)器包含在ASP.NET中,
其結(jié)構(gòu)如下圖所示:

    通過(guò)使用HTTP傳遞允許方法請(qǐng)求可以通過(guò)防火墻傳遞。數(shù)據(jù)的傳遞使用基于工業(yè)標(biāo)準(zhǔn)的XML,允許其它語(yǔ)言以
及平臺(tái)訪問(wèn)它們的功能。盡管不再支持MTS事務(wù),但是你還是有理由將你的應(yīng)用升級(jí)到Web Server,如果你不僅需
要分布式事務(wù)處理而且需要跨平臺(tái)操作。通過(guò)Visual Basic.NET你可以通過(guò)簡(jiǎn)單的拖-放操作來(lái)完成。

    當(dāng)你的工程升級(jí)后,用戶控件會(huì)升級(jí)到Windows控件;然而,自定義屬性標(biāo)記設(shè)置以及加速鍵設(shè)定不會(huì)升級(jí)。


單層應(yīng)用
Visual Basic 6.0支持建立以下類型的單層應(yīng)用程序:
單層數(shù)據(jù)庫(kù)應(yīng)用程序
Visual Basic插件
普通的應(yīng)用程序以及游戲。

    單層數(shù)據(jù)庫(kù)程序的代表就是使用Visual Basic訪問(wèn)微軟Access數(shù)據(jù)庫(kù)。這些應(yīng)用可以有限制的升級(jí)到Visual
Basic.NET
    現(xiàn)在Visual Basic.NET集成開發(fā)環(huán)境(IDE)已經(jīng)完全集成為Visual Studio.NET IDE的一部分,Visual Basic.NET
包含新的中性語(yǔ)言(language-neutral)的擴(kuò)展模塊Visual Basic.NET的插件現(xiàn)在就等同于Visual Studio.NET
add-ins,你可以利用Visual Studio.NET中的任何語(yǔ)言來(lái)開發(fā)插件。例如,你可以編寫一個(gè)Visual Basic.NET插件
來(lái)繪制Visual C#窗體的顏色或者為VB類添加注釋。為了支持這些新的功能,Visual Basic.NET已經(jīng)不再支持舊的
擴(kuò)展模塊,你需要更改原來(lái)程序中的擴(kuò)展對(duì)象。

    很多程序被規(guī)于應(yīng)用程序(Utility programs)。應(yīng)用程序需要操作文件、設(shè)置注冊(cè)表。對(duì)此,Visual Basic.NET
也提供了新特性。例如意外句柄可以捕捉文件系統(tǒng)錯(cuò)誤,使用注冊(cè)表類可以勇于操控注冊(cè)表。需要注意的是,一些
依賴于系統(tǒng)性能特征(performance characteristics)的程序,例如游戲需要做改進(jìn),因?yàn)閂isual Basic.NET提
供了新的系統(tǒng)性能特征,對(duì)于Visual Basic.NET下的游戲開發(fā),你可以使用微軟DirectX7,或者使用新的GDI:GDI+,
GDI+包含了很多新特性,對(duì)簡(jiǎn)單的2-D游戲提供了Alpha混合、反鋸齒支持以及更多的圖像文件格式的支持。

數(shù)據(jù)庫(kù)操作
Visual Basic 6.0提供了以下類型的數(shù)據(jù)庫(kù)訪問(wèn)方式:
ActiveX Data Objects (ADO)
Remote Data Objects (RDO)
Data Access Objects (DAO)

    Visual Basic.NET包含了增強(qiáng)版的ADO,稱之為ADO.NET。ADO.NET的目標(biāo)是操作離線數(shù)據(jù)。同時(shí)對(duì)于ADO的分布
應(yīng)用提供了更強(qiáng)大的支持。ADO.NET提供了綁定數(shù)據(jù)庫(kù)到Windows窗體控件和Web窗體。
    通過(guò)做一些小的更改,DAO,RDO,ADO仍然可以在Visual Basic.NET中使用。然而,Visual Basic.NET不支持DAO
和RDO數(shù)據(jù)庫(kù)到控件、數(shù)據(jù)庫(kù)控件或者RDO用戶連接的綁定。我們建議在應(yīng)用中包含DAO和RDO的應(yīng)用或者仍然使用
Visual Basic 6.0開發(fā)或者再升級(jí)到Visual Basic.NET前將它們更改為ADO數(shù)據(jù)綁定。
語(yǔ)言方面的改進(jìn)
    我們?cè)诤芏嗟木幊陶搲蛘咝侣劷M中可以看到C++的擁護(hù)者將VB稱為一個(gè)玩具語(yǔ)言(Toy Language)。其中VB最
被人詬病的是它不真正支持面向?qū)ο缶幊?oop)。
在新的Visual Basic中,這些都將成為過(guò)去。Visual Basic.NET將真正支持oop。繼承(inheritance)、多態(tài)
(polymorphism)以及重載(overloading)。當(dāng)然還不止這些。包括一些新的數(shù)據(jù)結(jié)構(gòu)、結(jié)構(gòu)性的錯(cuò)誤控制(Error
Handing)以及線程。這些都將被新的VB所支持。

繼承
    假設(shè)你編寫了一個(gè)只包含一個(gè)函數(shù)的名稱為BaseClass的基本類:
   
    Function GetCustomerName()
    ' Do some stuff
    End Function

    如果你想建立一個(gè)新類,并使用BaseClass中的GetCustomerName函數(shù)。但有不想重寫一編代碼。那么通過(guò)繼承,
你可以這樣編寫新類:

    Inherits BaseClass

    Function GetCustomerID()
    ' Do some stuff
    End Function

重載
    重載就是建立兩個(gè)具有同樣你名稱但是參數(shù)屬性不同的函數(shù)的過(guò)程。假設(shè)有GetCustomID函數(shù)根據(jù)輸入輸出用
戶的ID號(hào)碼。那么該函數(shù)可能有以下兩種類型:

Function GetCustomerID(custname as string) As Integer
' 通過(guò)用戶名獲得用戶ID
End Function

Function GetCustomerID(purch as long) As Integer
' 根據(jù)購(gòu)物單號(hào)碼獲得用戶ID
End Function

通過(guò)重載,你就可以根據(jù)不同類型的輸入調(diào)用同一個(gè)函數(shù)。
實(shí)際上現(xiàn)在的VB在某種程度上提供了重載的功能,考慮下面的函數(shù):

Function GetCustomID(vIN As Variant) As Long
    GetCustomID = vIN
End Function

你可以以下面兩種方式調(diào)用

ID = GetCustomID("123")
或者
ID = GetCustomID(123)

    那么為什么還要在新版本中引進(jìn)重載呢?這是因?yàn)樾碌腣isual Basic引進(jìn)了新的特性:類型安全(default
type safety)。在Visual Basic.NET中,Variant類型將不復(fù)存在,詳細(xì)的介紹看下面關(guān)于升級(jí)部分的內(nèi)容。

多態(tài)
    多態(tài)是在一個(gè)類中重新定義一個(gè)函數(shù)的過(guò)程。例如你需要建立一個(gè)基于BaseClass類的子類,但是又需要重新
編寫GetCustomerName函數(shù),在新版的VB中,你就可以這樣寫:

Inherits BaseClass

Function GetOrders()
Overrides Function GetOrders()
...
End Function

線程
    新的Visual Basic語(yǔ)言結(jié)構(gòu)部分將包含建立多線程,一個(gè)線程建立的范例如下:

set t = New Thread(New Threadstart
                  (AddressOf(BaseClass.Function1))

    從上面的范例還可以看到,Visual Basic.NET中的AddressOf函數(shù)將真正返回函數(shù)的指針。這在進(jìn)行API調(diào)用,
例如回調(diào)函數(shù)方面將是很有幫助的。

錯(cuò)誤處理(Error Handling)
    Visual Basic.NET的另外一個(gè)大的改進(jìn)就是錯(cuò)誤處理。Visual Basic將提供try…catch…finally結(jié)構(gòu),就象
Delphi中的那樣(微軟的原文是:just like those "respectable" languages :-))。例如:

Sub SafeWrite()
Try
  Open "Testfile"
  ...
  Write #1
Catch
   Kill "Testfile"
Finally
   Close #1
End Try
End Sub


升級(jí)
    當(dāng)代碼升級(jí)后,Visual Basic.NET會(huì)建立一個(gè)新的升級(jí)工程。下面通過(guò)幾個(gè)例子來(lái)說(shuō)明你的代碼做了那些升級(jí)

Variant類型到Object類型
    以前版本的Visual Basic支持Variant數(shù)據(jù)類型,該類型可以設(shè)定為除了固定程度字符串外的任何原始數(shù)據(jù)類
型和Empty,Error,Nothing和Null。在Visual Basic.NET中,Object數(shù)據(jù)類型可以設(shè)定為任何原始數(shù)據(jù)類型和Empty,
Error,Nothing,Null和對(duì)象指針。當(dāng)你的工程升級(jí)到Visual Basic.NET后,任何Variant定義都會(huì)改變?yōu)镺bject。
同樣,當(dāng)你在編輯器中插入代碼時(shí),Variant關(guān)鍵字也會(huì)被替換為Object。

Integer數(shù)據(jù)類型到Short數(shù)據(jù)類型
    在Visual Basic 6.0中,16bit數(shù)現(xiàn)在稱為Short。32bit數(shù)稱為Integer(64bit數(shù)稱為L(zhǎng)ong)。當(dāng)工程升級(jí)后,
數(shù)據(jù)定義會(huì)做如下改動(dòng):

Dim x As Integer
dim y as Long
更改為:

Dim x As Short
dim y as Integer

屬性語(yǔ)法
    Visual Basic.NET對(duì)于自定義屬性的語(yǔ)法作樂(lè)更加直觀的更改,將Get和Set合而為一。例如原來(lái)的屬性如下:

Property Get MyProperty() As Integer
    m_MyProperty = MyProperty
End Property
Property Let MyProperty(NewValue As Integer)
    m_MyProperty = NewValue
End Property

升級(jí)后更改為:

Property MyProperty() As Short
    Get
        m_MyProperty = MyProperty
    End Get
    Set
        m_MyProperty = Value
    End Set   
End Property

VB窗體到Windows窗體
    Visual Basic.NET包含新的窗體包,Windows窗體,Windows窗體包含內(nèi)含菜單編輯器。你的VB窗體會(huì)升級(jí)到
Windows窗體。

界面
在先前的版本中,公用類界面對(duì)于用戶總是隱藏的。在Visual Basic.NET中,公用類可以在代碼窗口中瀏覽和編輯。

升級(jí)報(bào)告及注釋
    當(dāng)工程升級(jí)后,升級(jí)報(bào)告會(huì)添加到你的工程中,詳細(xì)列出所有升級(jí)后的你所需要對(duì)代碼做的更改。同時(shí)代碼中
會(huì)加入注釋提示你注意任何潛在的問(wèn)題。這些注釋自動(dòng)出現(xiàn)在Visual Basic.NET的任務(wù)列表中。

編程介紹

使用先前綁定
    Visual Basic 6.0和Visual Basic.NET都支持對(duì)象的延遲綁定,該方法事先定義一個(gè)變量為Object數(shù)據(jù)類型,
然后在運(yùn)行時(shí)將其設(shè)定為一個(gè)類。然而,在升級(jí)過(guò)程中,當(dāng)訪問(wèn)延遲綁定對(duì)象的缺省屬性時(shí)可能會(huì)產(chǎn)生錯(cuò)誤。例
如假設(shè)工程中包含F(xiàn)orm1,F(xiàn)orm1中有一個(gè)Label對(duì)象,名稱為L(zhǎng)abel1,下面的Visual Basic 6.0代碼將Label的標(biāo)題
設(shè)定
為"SomeText"

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

    在Visual Basic.NET的Windows窗體中,Label控件的Caption屬性被稱為Text屬性。當(dāng)你的代碼升級(jí)后,所有
實(shí)例中的Caption屬性都會(huì)轉(zhuǎn)換為Text屬性,但是延遲綁定對(duì)象是無(wú)類型(type-less)的,VB無(wú)法檢測(cè)到對(duì)象的
類型并做更改,在這種情況下,你需要手工對(duì)代碼做改動(dòng)。當(dāng)你使用先前綁定對(duì)象時(shí),對(duì)象可以自動(dòng)升級(jí),如下:

Dim o As Label
Set o = Me.Label1
o.Caption = "SomeText"

    所以在程序中你需要將對(duì)象定義為適當(dāng)?shù)膶?duì)象類型而不是簡(jiǎn)單的定義為Object對(duì)象類型。

    同Visual C++類似。Visual Basic.NET支持函數(shù)的重載,例如下面的一個(gè)函數(shù)具有兩個(gè)形態(tài)

    Environ( Expression As Integer) As String
    Environ( Expression As String ) As String

    Visual Basic.NET會(huì)自動(dòng)檢測(cè)該使用那個(gè)參數(shù)的函數(shù)。如果你傳遞一個(gè)正數(shù)值到Environ(),那么正數(shù)調(diào)用版
本會(huì)被調(diào)用;如果傳遞一個(gè)字符串,String版本會(huì)被調(diào)用。如果傳遞Object或者Variant數(shù)據(jù)類型到一個(gè)重載函數(shù)
將產(chǎn)生運(yùn)行時(shí)錯(cuò)誤。如果要想產(chǎn)生正確的結(jié)果就需要通過(guò)數(shù)據(jù)類型的強(qiáng)制轉(zhuǎn)換,例如:

Dim a As String
Dim v As Variant
v = "Path"
a = Environ(CStr(v))   '正確

    對(duì)于延遲綁定的對(duì)象使用強(qiáng)制類型轉(zhuǎn)換是一個(gè)很好的編程習(xí)慣。這就使得代碼可讀性更好,同時(shí)也可以非常輕
松的移植到Visual Basic.NET使用Date存儲(chǔ)日期/時(shí)間較早版本的VB支持使用Double數(shù)據(jù)類型來(lái)存儲(chǔ)和改變時(shí)間。
在Visual Basic.NET中,這個(gè)特性將不再支持,因?yàn)樵谟?jì)算機(jī)內(nèi)部日期并不是以Double方式存儲(chǔ)的,例如下面的代
碼可以在Visual Basic 6.0中運(yùn)行,但是在Visual Basic.NET中會(huì)產(chǎn)生錯(cuò)誤。

Dim dbl As Double
Dim dat As Date
dat = Now
dbl = dat      '錯(cuò)誤,不能將一個(gè)Date變量賦予一個(gè)Double變量
dbl = DateAdd("d", 1, dbl)   '錯(cuò)誤,Double變量不能用于日期函數(shù)
dat = CDate(dbl)   '錯(cuò)誤 CDate函數(shù)不能將Double變量轉(zhuǎn)換到Date

    .NET架構(gòu)提供了ToOADate與FromOADate函數(shù)用于在double變量以及Date變量之間轉(zhuǎn)換。然而這需要在升級(jí)后手
工修改,所以在存儲(chǔ)日期時(shí)應(yīng)該使用Date數(shù)據(jù)類型。

缺省屬性
    在Visual Basic 6.0中,許多對(duì)象都有缺省屬性,缺省屬性在代碼中可以省略。例如:

MsgBox Form1.Text1.Text

可以這樣編寫:

MsgBox Form1.Text1   

缺省屬性在代碼編譯是決定。同樣,你也可以在延遲綁定的對(duì)象中使用缺省屬性,例如:

Dim obj As Object
Set obj = Form1.Text1
MsgBox obj

對(duì)于延遲綁定的對(duì)象,缺省屬性在程序運(yùn)行時(shí)決定。

    Visual Basic.NET不支持缺省屬性,當(dāng)你的工程升級(jí)后,Visual Basic.NET會(huì)自動(dòng)決定缺省屬性,但是對(duì)于延
遲綁定的對(duì)象無(wú)法自動(dòng)解決決定缺省屬性的問(wèn)題。在這種情況下,你需要自己來(lái)修改代碼。更加復(fù)雜的是,很多庫(kù)
是通過(guò) _Default屬性來(lái)實(shí)現(xiàn)缺省屬性的。_Default象是一個(gè)代理,它將調(diào)用傳遞給真正的缺省屬性。所以當(dāng)你的
工程升級(jí)后,一些屬性會(huì)被更改為 _Default。代碼還是象往常那樣工作,只是代碼不如原來(lái)的實(shí)際屬性易讀。

Dim obj As Object
Set obj = Me.Text1
MsgBox obj   '不好的代碼,使用缺省屬性
MsgBox Me.Text1   '不好的代碼,使用缺省屬性

use:

Dim obj As Object
Set obj = Me.Text1
MsgBox obj.Text   '好的代碼,寫出了屬性
MsgBox Me.Text1.Text   '好的代碼,寫出了屬性

    雖然缺省屬性不被Visual Basic.NET支持,但是帶參數(shù)的缺省屬性是被支持的,要了解它們之間的區(qū)別,下面
是范例:

Dim rs As ADODB.Recordset
rs("CompanyName") = "SomeCompany"
rs!CompanyName = "SomeCompany"

實(shí)際上等于:

Dim rs As ADODB.Recordset
rs.Fields("CompanyName").Value = "SomeCompany"
rs.Fields!CompanyName.Value = "SomeCompany"

因?yàn)閂alue是Fields的缺省屬性
對(duì)于第二種寫法,Visual Basic.NET是支持的;然而第一種情況不被支持,那么正確的用法如下:

Dim rs As ADODB.Recordset
rs("CompanyName").Value = "SomeCompany"
rs!CompanyName.Value = "SomeCompany"

    象上面的范例和其它的大多數(shù)情況可以在工程升級(jí)時(shí)解決,但是你還是要避免在Visual Basic 6.0中在Object
和Variant數(shù)據(jù)類型使用缺省屬性。因?yàn)樯?jí)程序無(wú)法發(fā)現(xiàn)并解決這些錯(cuò)誤。

對(duì)Boolean類型數(shù)據(jù)使用AND/OR/NOT操作
    And和Or關(guān)鍵字在Visual Basic.NET和Visual Basic 6.0中的使用是不同的,在Visual Basic 6.0中,AND運(yùn)算
既執(zhí)行邏輯AND操作也執(zhí)行逐位AND操作,取決于操作數(shù)(如果是Boolean類型,執(zhí)行邏輯AND操作,如果是數(shù)字,執(zhí)
行逐位AND操作)。在Visual Basic.NET中,AND運(yùn)算只執(zhí)行邏輯AND操作。對(duì)于逐位操作,在Visual Basic.NET提供
了一組操作:BitAnd, BitOr, BitNot以及BitXor 。

下面是演示這些差異的范例程序

Dim a As Integer
Dim b As Integer
Dim c As Boolean
a = 1
b = 2
c = a And b
MsgBox ("The answer is " & c)

    當(dāng)上面的代碼在Visual Basic 6.0下運(yùn)行時(shí),結(jié)果是False(執(zhí)行逐位AND操作);然而在Visual Basic.NET下,
結(jié)果是True(執(zhí)行邏輯AND操作)。
    要確定你的程序在升級(jí)后也運(yùn)行結(jié)果同升級(jí)前一樣,Visual Basic.NET包含了兼容函數(shù)VB6.And, VB6.Or以及
VB6.Not,這些函數(shù)執(zhí)行的結(jié)果同Visual Basic 6.0下的AND/OR/NOT操作的執(zhí)行結(jié)果是一樣的。當(dāng)代碼升級(jí)后,結(jié)
果會(huì)象下面這樣:

Dim a As Short
Dim b As Short
Dim c As Boolean
a = 1
b = 2
c = VB6.And(a, b)
MsgBox ("The answer is " & c)

升級(jí)后的代碼會(huì)得出False的結(jié)果,同Visual Basic 6.0下運(yùn)行一樣

    如果不想你的代碼升級(jí)后使用兼容函數(shù),就需要確保你的AND/OR/NOT都使用在Boolean類型數(shù)據(jù)的操作中,例
如,如果上面的代碼更改為下面的方式:

Dim a As Integer
Dim b As Integer
Dim c As Boolean
a = 1
b = 2
c = a <> 0 And b <> 0
MsgBox ("The answer is " & c)

當(dāng)升級(jí)后,代碼同原來(lái)的幾乎一樣:

Dim a As Short
Dim b As Short
Dim c As Boolean
a = 1
b = 2
c = a <> 0 And b <> 0
MsgBox ("The answer is " & c)

    同前面不同的是每一個(gè)操作都是在Boolean數(shù)據(jù)之間進(jìn)行的,因此它們?cè)赩isual Basic 6.0中使用的都是邏輯
AND操作。所以在升級(jí)到Visual Basic.NET后不會(huì)發(fā)生改變。這樣做的意義是你可以直接在Visual Basic.NET和
Visual Basic 6.0之間拷貝和粘貼代碼,你的代碼會(huì)運(yùn)行的更快因?yàn)槭褂玫氖潜镜氐腁ND操作而不是兼容函數(shù)。

    另外一個(gè)需要考慮的問(wèn)題是對(duì)于函數(shù)結(jié)果的AND/OR/NOT 操作的問(wèn)題,例如下面的范例:

Dim b As Boolean
b = Function1() And Function2()

    在Visual Basic 6.0中,F(xiàn)unction1和Function2的結(jié)果都會(huì)執(zhí)行后再將結(jié)果進(jìn)行AND操作。在Visual Basic.NET
中,只有當(dāng)Function1的結(jié)果為True時(shí)才會(huì)計(jì)算Function2。因?yàn)閂isual Basic.NET中的AND運(yùn)算執(zhí)行的是邏輯AND操
作,如果Function1結(jié)果為False,AND結(jié)果肯定是False,為了加快速度就不再執(zhí)行Function2的了。但是如果
Function2另有目的,例如用于避免某些錯(cuò)誤,那么就會(huì)出現(xiàn)不可預(yù)知的錯(cuò)誤,那么上面的代碼升級(jí)后就會(huì)象下面
的樣子:

Dim b As Boolean
b = VB6.AND(Function1(), Function2())

為了不在升級(jí)代碼中出現(xiàn)兼容函數(shù),原來(lái)的代碼需要做如下的改動(dòng):

Dim b As Boolean
Dim c As Boolean
Dim d As Boolean
c = Function1()
d = Function2()
b = c And d

    另一個(gè)需要注意的是在Visual Basic.NET中,True值將不再是-1而是1。做這個(gè)改變是為了使Visual Basic.NET
能集成在 .NET語(yǔ)言中。因?yàn)橛羞@個(gè)改變,你需要再你的Visual Basic 6.0工程中使用常量True而不是-1來(lái)表示真
值,使用Boolean類型而不是整數(shù)類型變量保存Boolean數(shù)據(jù)。下面的代碼說(shuō)明了Visual Basic 6.0和Visual Basic.NET
之間的不同:

Dim i As Integer
i = True
If i = -1 Then
    MsgBox ("True")
Else
    MsgBox ("False")
End If
在Visual Basic 6.0中,結(jié)果為True,而在Visual Basic.NET中結(jié)果為False。

如果對(duì)代碼做如下改動(dòng),程序在兩種語(yǔ)言下運(yùn)行都會(huì)顯示True

Dim i As Boolean
i = True
If i = True Then
    MsgBox ("True")
Else
    MsgBox ("False")
End If

通過(guò)上面的范例可以看出在程序中需要注意兩點(diǎn):
1、使用常量True和False來(lái)判斷是否而不要使用0和-1
2、使用Boolean類型變量?jī)?chǔ)存Boolean數(shù)值而不要使用Integer類型變量
如果在你的程序中沒(méi)有這么做的話,在升級(jí)后你還需要做大量的手工改動(dòng)

避免Null傳播(Propagation)
    先前版本的VB支持Null傳播。Null傳播的前提是null值使用在表達(dá)式中,表達(dá)式的結(jié)果將是Null,例如下面
的范例,結(jié)果V都將是Null

Dim V
V = 1 + Null
V = Null + Right$("SomeText", 1)
V = Right("SomeText", 0)

    Null傳播在Visual Basic.NET中將不再被支持。象上面的語(yǔ)句1+Null會(huì)產(chǎn)生一個(gè)類型錯(cuò)誤。另外在Visual
Basic 6.0中有兩個(gè)求左值的函數(shù):Left和Left$前者返回值為Variant類型并且可以為空,Left$函數(shù)返回值為String
類型。在Visual Basic.NET中,只有一個(gè)Left函數(shù),該函數(shù)總是返回String類型值

    為了使程序兼容Visual Basic 6.0以及Visual Basic.NET,你需要在代碼中加入對(duì)Null檢測(cè)的代碼,在Visual
Basic.NET中,下面的函數(shù)將不再返回Null值:

Chr Mid
Command Oct
CurDir Right
Date RTrim
Environ Space
Error Str
Hex Time
LCase Trim
LTrim UCase

由于數(shù)據(jù)庫(kù)中的數(shù)據(jù)可以包含Null值,所以你需要在程序中對(duì)獲得的數(shù)據(jù)加入代碼檢測(cè)其值是否為Null。

使用以0為下界的數(shù)組
    Visual Basic 6.0允許你使用任何整數(shù)數(shù)字作為一個(gè)數(shù)組的上界和下界。同樣你也可以通過(guò)ReDim將一個(gè)Variant
重新定義為數(shù)組。為了能夠同.NET平臺(tái)下的其它語(yǔ)言協(xié)同工作,Visual Basic.NET數(shù)組必須以0作為下界,而且只
有一個(gè)變量事先定義為數(shù)組后才可以使用ReDim函數(shù)重新定義。雖然這樣限制了數(shù)組定義的靈活性,但是這樣可以
在Visual Basic.NET和.NET下的其它語(yǔ)言之間傳遞數(shù)組。下面的范例說(shuō)明了新的定義數(shù)組的約束:

Dim a(1 To 10) As Integer   '錯(cuò)誤:下界必須為0
Dim v
ReDim v(10)   '錯(cuò)誤,在沒(méi)有定義v為數(shù)組前不能使用ReDim
Dim b(10) As Integer   '正確
ReDim b(5) As Integer   '正確

    另外,在Visual Basic 6.0中, Dim (0 to 10) As Integer定義了包含11各整數(shù)的數(shù)組,索引從0到10。同樣
的定義在Visual Basic.NET下建立一個(gè)包含10個(gè)整數(shù)的數(shù)組,索引從0到9。

    基于上面的改變,Option Base 0|1已經(jīng)從Visual Basic.NET中刪除了。

    當(dāng)你的代碼升級(jí)到Visual Basic.NET后,以0為下界的數(shù)組不會(huì)改變。如果數(shù)組下界非0的話,數(shù)組會(huì)升級(jí)到一
個(gè)兼容類,如下:

Dim a(1 To 10) As Integer
改變?yōu)?

Dim a As Object = New VB6.Array(GetType(Short), 1,10)

    兼容數(shù)組類比本地?cái)?shù)組操作起來(lái)要慢很多,同時(shí)在程序中使用它也有限制。例如你不能將一個(gè)兼容數(shù)組類作為
參數(shù)傳遞到一個(gè)以數(shù)組作為參數(shù)的函數(shù),你也不能傳遞一個(gè)兼容類到Visual C#或者Visual C++類中。

    基于以上原因,你需要在你的Visual Basic 6.0代碼中使用以0為下界的數(shù)組,避免使用ReDim定義數(shù)組,避免
使用Option Base 1語(yǔ)句。

使用VB常量而不要使用它們所代表的值
在寫代碼的時(shí)候,盡量使用VB常量而不要使用它們所代表的值。例如你要在運(yùn)行時(shí)將一個(gè)窗口最大化,使用:

Me.WindowState = vbMaximized   'Good: Constant name

而不要使用:

Me.WindowStyle = 2   'Bad: Underlying value
Me.WindowStyle = X   'Bad: Variable

    在Visual Basic.NET中,一些屬性和常量的數(shù)值發(fā)生了改變;例如True的值由-1變?yōu)榱?。在你的代碼升級(jí)到
Visual Basic.NET后,大部分的常量會(huì)自動(dòng)更改;然而如果你使用的是常量代表的數(shù)值而不是常量名,那么你就要
做大量的手工更改工作。

用戶自定義數(shù)據(jù)類型中的數(shù)組和固定長(zhǎng)度字符串
    為了使Visual Basic.NET數(shù)組和數(shù)據(jù)結(jié)構(gòu)完全兼容Visual Studio.NET,固定長(zhǎng)度字符串在新語(yǔ)言中不再被支
持。在大多數(shù)情況下者不是問(wèn)題,因?yàn)閂isual Basic.NET提供了兼容固定長(zhǎng)度字符串定義的類,那么代碼:

Dim MyFixedLengthString As String * 100

升級(jí)后會(huì)變成這樣:

Dim MyFixedLengthString As New VB6.FixedLengthString(100)

    然而,在數(shù)據(jù)結(jié)構(gòu)(例如用戶自定義數(shù)據(jù))中使用固定長(zhǎng)度字符串類可能產(chǎn)生錯(cuò)誤。因?yàn)樵谟脩糇远x數(shù)據(jù)結(jié)
構(gòu)建立時(shí)類不會(huì)被建立。用戶自定義數(shù)據(jù)中的固定長(zhǎng)度數(shù)組也會(huì)產(chǎn)生同樣的問(wèn)題。

    當(dāng)你的代碼升級(jí)后,在代碼中的用戶自定義數(shù)據(jù)類型中如果有固定長(zhǎng)度的數(shù)組和字符串的話,在定義位置會(huì)添
加注釋提醒你在使用用戶自定義數(shù)據(jù)類型前首先對(duì)字符串或者數(shù)組進(jìn)行初始化。然而,你可以在你的Visual Basic
6.0的用戶自定義類型中將固定長(zhǎng)度的字符串定義改變?yōu)樽址x,將固定長(zhǎng)度數(shù)組定義改變?yōu)槲闯跏蓟瘮?shù)組來(lái)
避免升級(jí)產(chǎn)生后產(chǎn)生上面的問(wèn)題。例如:

Private Type MyType
    MyArray(5) As Integer
    MyFixedString As String * 100
End Type
Sub Bar()
    Dim MyVariable As MyType
End Sub

升級(jí)后會(huì)變?yōu)椋?BR>
Private Type MyType
    MyArray() As Integer
    MyFixedString As String
End Type
Sub Bar()
    Dim MyVariable As MyType
    ReDim MyVariable.MyArray(5) As Integer
    MyVariable.MyFixedString = String$(100, " ")
End Sub   

Avoid Legacy Features
避免使用從原始Basic繼承的特性,如下的關(guān)鍵字在新版本語(yǔ)言中將不再出現(xiàn):

Def
Computed GoTo/GoSub
GoSub/Return
Option Base 0|1
VarPtr, ObjPtr, StrPtr
LSet

Windows APIs
    大多數(shù)的API調(diào)用可以象在Visual Basic 6.0中一樣使用,因?yàn)閿?shù)據(jù)類型發(fā)生了改變。在Visual Basic 6.0中
的Long類型在Visual Basic.NET中定義為Integer類型。在升級(jí)過(guò)程中這些定義會(huì)自動(dòng)改變,例如:

Private Declare Function GetVersion Lib "kernel32" () As Long
Function GetVer()
    Dim Ver As Long
    Ver = GetVersion()
    MsgBox ("System Version is " & Ver)
End Function

改變?yōu)椋?BR>
Private Declare Function GetVersion Lib "kernel32" () As Integer        
Function GetVer()
    Dim Ver As Integer
    Ver = GetVersion()
    MsgBox("System Version is " & Ver)
End Function

    除了數(shù)字類型的升級(jí)外,Visual Basic 6.0還支持固定長(zhǎng)度字符串類型,該類型升級(jí)到Visual Basic.NET后
會(huì)定義為固定長(zhǎng)度字符串兼容類。

所以在Visual Basic 6.0代碼中最好使用通用字符串定義,例如:

Private Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Long) As Long
Function GetUser()
    Dim Ret As Long
    Dim UserName As String
    Dim Buffer As String * 25
    Ret = GetUserName(Buffer, 25)
    UserName = Left$(Buffer, InStr(Buffer, Chr(0)) - 1)
    MsgBox (UserName)
End Function

上面的代碼出現(xiàn)了固定長(zhǎng)度字符串,最好更改為:

    Dim Buffer As String
    Buffer = String$(25, " ")

升級(jí)到Visual Basic.NET后會(huì)稱為下面的樣子:

Declare Function GetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer
Function GetUser()
    Dim Ret As Integer
    Dim UserName As String
    Dim Buffer As String
    Buffer = New String(CChar(" "), 25)
    Ret = GetUserName(Buffer, 25)
    UserName = Left(Buffer, InStr(Buffer, Chr(0)) - 1)
    MsgBox(UserName)
End Function

    在有些情況下,Visual Basic.NET能夠更好的控制傳遞字符串到API調(diào)用,因?yàn)槟憧梢酝ㄟ^(guò)ANSI 和UNICODE
關(guān)鍵字定義字符串傳遞的方式。

有三種情況需要對(duì)代碼最手工改進(jìn)。
1、在傳遞給API函數(shù)的自定義數(shù)據(jù)類型定義中包含固定長(zhǎng)度字符串和數(shù)組。在Visual Basic.NET中你需要對(duì)自定
義數(shù)據(jù)類型定義中的每一個(gè)固定長(zhǎng)度
字符串和數(shù)組添加MarshallAs 屬性。
2、在定義中使用As Any聲明。該種聲明不再被Visual Basic.NET支持,變量定義為As Any通常是為了傳遞一個(gè)既
可能是字符串也可能是Null的變量,在Visual Basic.NET中,你可以定義兩個(gè)不同類型的API,一個(gè)為L(zhǎng)ong類型,
一個(gè)為String類型,以API函數(shù)GetPrivateProfileString 為例:

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias
   "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
      lpKeyName As Any, ByVal lpDefault As String, ByVal
         lpReturnedString As String, ByVal nSize As Long, ByVal
            lpFileName As String) As Long

你可以刪除As Any而代之以定義兩個(gè)不同的函數(shù);一個(gè)接受Long數(shù)值,一個(gè)接收String樹脂:

Private Declare Function GetPrivateProfileStringKey Lib "kernel32" Alias
   "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal
      lpKeyName As String, ByVal lpDefault As String, ByVal
         lpReturnedString As String, ByVal nSize As Long, ByVal
            lpFileName As String) As Long
Private Declare Function GetPrivateProfileStringNullKey Lib "kernel32"
   Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String,
      ByVal lpKeyName As Long, ByVal lpDefault As String, ByVal
         lpReturnedString As String, ByVal nSize As Long, ByVal
            lpFileName As String) As Long

當(dāng)你希望傳遞Null數(shù)值時(shí),使用GetPrivateProfileStringNullKey。

3、如果你的程序中有諸如建立線程、Windows子類(subclassing),消息鉤子等API調(diào)用時(shí),這些函數(shù)在
Visual Basic.NET下可能會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤。很多這些API在Visual Basic.NET或者.NET架構(gòu)中有等價(jià)的函數(shù)。

窗體與控件
    Visual Basic.NET包含了一個(gè)新的窗體包:Windows窗體。Windows窗體與Visual Basic 6.0窗體間保持了最
大的兼容性;然而,還是有一些需要提出的關(guān)鍵差異:
    Windows窗體不支持OLE container控件;你需要在Visual Basic 6.0應(yīng)用中避免使用該控件。
    在Windows窗體中沒(méi)有Shape控件。矩形和圓角形狀控件會(huì)升級(jí)為L(zhǎng)abel控件,橢圓和圓形無(wú)法升級(jí)。你需要在
Visual Basic 6.0應(yīng)用中避免使用該控件。
    在Windows窗體中沒(méi)有Line控件。橫線條和豎線條控件會(huì)升級(jí)為L(zhǎng)abel控件,斜線條無(wú)法升級(jí)。你需要在Visual
Basic 6.0應(yīng)用中避免使用該控件。

    Windows窗體提供了新的圖形命令取代Circle, CLS, PSet, Line以及Point。因?yàn)樾碌膶?duì)象模塊同Visual Basic
6.0是不同的,這些方法無(wú)法被升級(jí)

    對(duì)于Timer控件,將Interval屬性設(shè)置為0不能使Timer控件停止運(yùn)行而是將時(shí)間間隔設(shè)定為1。所以在Visual
Basic 6.0中,需要通過(guò)設(shè)置Enabled屬性為False而不是將Interval屬性設(shè)置為0來(lái)停止Timer運(yùn)行。

    Windows窗體包含兩種菜單控件,MainMenu(窗口菜單)和ContenxtMenu(彈出菜單)。而Visual Basic 6.0只包
含一種菜單控件:Menu。Menu可以以窗口菜單方式也可以以彈出菜單方式打開。工程升級(jí)后Menu會(huì)升級(jí)到MainMenu。
但是你不能以彈出方式打開MainMenu;你需要手工建立彈出菜單。

Windows窗體不支持動(dòng)態(tài)數(shù)據(jù)交換(DDE)。
Windows窗體不支持Form.PrintForm方法

    雖然Windows窗體在功能上支持拖-放但是對(duì)象模塊同Visual Basic 6.0有很大的不同,所以Visual Basic 6.0
中的拖-放屬性以及方法無(wú)法升級(jí)。

    .NET架構(gòu)對(duì)Clipboard對(duì)象進(jìn)行了升級(jí),對(duì)剪貼版的操作比Visual Basic 6.0的Clipboard對(duì)象提供了更多的函
數(shù)和支持。因?yàn)閷?duì)象模塊的不同,Clipboard聲明無(wú)法自動(dòng)升級(jí)


    Windows窗體不支持在運(yùn)行時(shí)對(duì)窗體和控件的Name屬性進(jìn)行訪問(wèn),這樣你就不能通過(guò)Name屬性訪問(wèn)控件集合中
的控件(這個(gè)功能在.Net的System.Reflection類中提供)

    為了保證你的窗體在升級(jí)后保持正確的尺寸,你要確保在程序中將缺省的縮放比例(ScaleMode)設(shè)定為Twips。
當(dāng)升級(jí)后,Visual Basic.NET將度量單位從Twips轉(zhuǎn)換為pixels

    上面就是關(guān)于Visual Basic.NET的說(shuō)明,從上面的介紹可以看到,相對(duì)于以前的版本,這一次的的Visual Basic
可以說(shuō)是有了重大的革新(而且似乎有一些方面在向Delphi看齊)。它提供了以前版本從來(lái)沒(méi)有的面向?qū)?duì)象編程,
強(qiáng)大的錯(cuò)誤處理,同VC++ C Sharp更緊密的集成。但是也犧牲了很多原來(lái)Basic一直都有的特性。不過(guò)總的來(lái)看,還是
值得升級(jí)到Visual Basic.NET的。如果最終的版本能夠?qū)崿F(xiàn)他們所說(shuō)的那樣,我會(huì)給Visual Basic.NET打4顆星。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多