Visual Basic 管理信息開發(fā)案例 第5 7章 第7章 將VB60程序移植到VBnet課件_第1頁
Visual Basic 管理信息開發(fā)案例 第5 7章 第7章 將VB60程序移植到VBnet課件_第2頁
Visual Basic 管理信息開發(fā)案例 第5 7章 第7章 將VB60程序移植到VBnet課件_第3頁
Visual Basic 管理信息開發(fā)案例 第5 7章 第7章 將VB60程序移植到VBnet課件_第4頁
Visual Basic 管理信息開發(fā)案例 第5 7章 第7章 將VB60程序移植到VBnet課件_第5頁
已閱讀5頁,還剩155頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第7章將VB6.0程序移植到VB.net7.1什么是VisualBasic.NET(VB.net)

7.2VB.net程序的基本結(jié)構(gòu)7.3如何進(jìn)行程序升級(jí)第7章將VB6.0程序移植到VB.net7.1什么在線教務(wù)輔導(dǎo)網(wǎng):教材其余課件及動(dòng)畫素材請(qǐng)查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:在線教務(wù)輔導(dǎo)網(wǎng):http://www.shangfuwang7.1什么是VisualBasic.NET(VB.net)VisualBasic.NET是最新一代的VisualBasic語言。它并不是簡(jiǎn)單地在VisualBasic6.0上添加一些新特性而已,微軟重新設(shè)計(jì)了產(chǎn)品以便使開發(fā)者能夠更加容易地開發(fā)分布式應(yīng)用,例如基于Web的程序以及多層系統(tǒng)。7.1什么是VisualBasic.NET(VB.neVisualBasic.NET中有兩種窗體包:Windows窗體以及Web窗體。一個(gè)新版的ADO.NET用于接受離線數(shù)據(jù)源。新的語言,移走了原來的關(guān)鍵字,提高Type數(shù)據(jù)的安全性以及提供低級(jí)別結(jié)構(gòu)以滿足高級(jí)別開發(fā)者的需求。VisualBasic.NET中7.1.1為何VB.net不提供100%的繼承性當(dāng)在設(shè)計(jì)VisualBasic.NET時(shí)有兩個(gè)方向:翻新以及完全新建。為了提供給用戶盡可能多的新特性(例如繼承以及線程特性),為了提供對(duì)新平臺(tái)的完全訪問,以及為了使VisualBasic能夠完全轉(zhuǎn)移到下一代的Web應(yīng)用中,正確的選擇是完全新建。7.1.1為何VB.net不提供100%的繼承性一個(gè)重要的目標(biāo)是使VisualBasic代碼可以完全集成到用其他語言編寫的代碼中,例如MicrosftC#(讀CSharp)或者VisualC++,以及讓VisualBasic開發(fā)者可以完全而且簡(jiǎn)單地利用.NET框架的功能,而不需要像原來那樣使用WindowsAPI調(diào)用。一個(gè)重要的目標(biāo)是使VisualBa所有的Visual語言將與其他面向通用運(yùn)行時(shí)的語言(CommonLanguageRuntime)使用相同的數(shù)據(jù)定義類型、數(shù)組、用戶自定義數(shù)組、類以及界面。不過這樣就要做出一些犧牲,例如固定長(zhǎng)度字符串以及以非0數(shù)為下界的數(shù)組將不再被支持。VisualBasic現(xiàn)在已經(jīng)成為一個(gè)真正面向?qū)ο蟮恼Z言,一些不一致的特性,例如GoSub/Return語句以及DefInt語句已經(jīng)從新語言中移走了。所有的Visual語言將與其他面向7.1.2如何將VB6.0程序升級(jí)到VB.netVisualBasic.NET原則上可以使傳統(tǒng)的Windows開發(fā)者轉(zhuǎn)移到建立下一代Web以及多層應(yīng)用中。所以,用戶的代碼需要升級(jí)以適應(yīng)VisualBasic.NET。在使用VisualBasic.NET打開VisualBasic6.0工程后,通過自動(dòng)升級(jí)工具可以一步步地升級(jí)并建立一個(gè)新的基于VisualBasic.NET的工程。這個(gè)升級(jí)是單向的,即新的VisualBasic.NET工程無法再在VisualBasic6.0中打開。7.1.2如何將VB6.0程序升級(jí)到VB.net7.1.3讓VB6.0和VB.net同時(shí)工作VisualBasic.NET支持升級(jí)VisualBasic6.0生成的工程,但如果該工程是在VisualBasic1~5版本下編寫的,則需要首先升級(jí)到VisualBasic6.0工程,編譯、保存后再升級(jí)到VisualBasic.NET中去。7.1.3讓VB6.0和VB.net同時(shí)工作VisualBasic.NET和VisualBasic6.0可以安裝在同一系統(tǒng)下并可以同時(shí)運(yùn)行。同樣,利用較早版本或者其他語言編寫的COM組件也可以集成到VisualBasic.NET中。VisualBasic.NET編譯的組件與VisualBasic6.0編譯的組件相比有一點(diǎn)點(diǎn)的不同,VisualBasic.NET對(duì)象是通過垃圾收集方式釋放的,所以在對(duì)象被刪除到對(duì)象真正被從內(nèi)存中釋放之間或許會(huì)有一定的延遲。VisualBasic.NET和7.2VB.net程序的基本結(jié)構(gòu)7.2.1基于瀏覽器的應(yīng)用VisualBasic6.0和VisualStudio6提供了以下的技術(shù)用于建立基于瀏覽器的Internet和Intranet應(yīng)用:Webclasses、DHTMLprojects、ActiveXDocuments、ActiveServerPages(ASP)。7.2VB.net程序的基本結(jié)構(gòu)7.2.1基于VisualBasic.NET中引入了ASP.NET。ASP.NET是增強(qiáng)版的ASP,并加入到了Web窗體(WebForms)結(jié)構(gòu)中。Web窗體是.NET架構(gòu)中非常重要的一個(gè)組成部分。一個(gè)Web窗體包含兩個(gè)部分:HTML文件和源程序文件。HTML文件用于描述頁面;源程序文件用于響應(yīng)、控制頁面事件。建立一個(gè)Web窗體與現(xiàn)在建立一個(gè)VisualBasic窗體一樣簡(jiǎn)單。它的Wysiwyg界面設(shè)計(jì)方式同現(xiàn)在的VisualBasic是一樣的。VisualBasic.NET中引一些介紹以及結(jié)構(gòu)方面的建議:(1)建議使用微軟多層構(gòu)架來開發(fā)自己的應(yīng)用,利用ASP來開發(fā)界面,同時(shí)使用VisualBasic6.0或者VisualC++6.0開發(fā)的COM組件。(2)包含DHTML頁面及客戶端DLL的DHTML應(yīng)用不能自動(dòng)升級(jí)到VisualBasic.NET。建議用戶在VisualBasic6.0下開發(fā)這些應(yīng)用。(3)同DHTML工程一樣,ActiveXDocuments不被VisualBasic.NET支持,不能自動(dòng)升級(jí)。一些介紹以及結(jié)構(gòu)方面的建議:(4)Web類(Webclasses)在VisualBasic.NET中將不再存在,Web類應(yīng)用將升級(jí)到ASP.NET,但自動(dòng)升級(jí)后用戶還需要做一些更改。(4)Web類(Webclasse7.2.2用戶控件VisualBasic.NET提供了新的窗體包:Windows窗體。相對(duì)于VisualBasic6.0的窗體,Windows窗體使用不同的對(duì)象模塊,不過絕大部分是兼容的。當(dāng)工程升級(jí)時(shí),VisualBasic窗體自動(dòng)升級(jí)到Windows窗體。7.2.2用戶控件對(duì)于開發(fā)中間層的MTSandCOM+服務(wù)器組件,VisualBasic.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)試(組件需要以nativecode方式編譯,包含符號(hào)調(diào)試信息以及不進(jìn)行優(yōu)化)。VisualBasic.NET同樣也提供了新的中間層組件:WebServices(Web服務(wù)器)。Web服務(wù)器包含在ASP.NET中。對(duì)于開發(fā)中間層的MTSandC7.2.3單層應(yīng)用VisualBasic6.0支持建立以下類型的單層應(yīng)用程序:●單層數(shù)據(jù)庫(kù)應(yīng)用程序;●VisualBasic插件;●普通的應(yīng)用程序以及游戲。7.2.3單層應(yīng)用7.2.4數(shù)據(jù)庫(kù)操作VisualBasic6.0提供了ADO、RDO和DAO三種類型的數(shù)據(jù)庫(kù)訪問方式,而VisualBasic.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窗體。7.2.4數(shù)據(jù)庫(kù)操作7.2.5語言方面的改進(jìn)我們?cè)诤芏嗟木幊陶搲蛘咝侣劷M中可以看到C++的擁護(hù)者將VisualBasic稱為一個(gè)玩具語言(ToyLanguage)。其中,VisualBasic最被人詬病的就是它不真正支持面向?qū)ο缶幊?OOP)。在新的VisualBasic中,這些都將成為過去。7.2.5語言方面的改進(jìn)而VisualBasic.NET將真正支持OOP、繼承(Inheritance)、多態(tài)(Polymorphism)以及重載(Overloading)。當(dāng)然,還包括一些新的數(shù)據(jù)結(jié)構(gòu)、結(jié)構(gòu)性的錯(cuò)誤控制(ErrorHanding)以及線程等,這些都將被新的VisualBasic.NET所支持。而VisualBasic.NET假設(shè)我們編寫了一個(gè)只包含一個(gè)函數(shù)的名稱為BaseClass的基本類:FunctionGetCustomerName()'DosomestuffEndFunction如果想建立一個(gè)新類,并使用BaseClass中的GetCustomerName函數(shù),假設(shè)我們編寫了一個(gè)只包含一個(gè)函數(shù)的但又不想重寫代碼,那么就可以通過繼承來這樣編寫新類:InheritsBaseClassFunctionGetCustomerID()'DosomestuffEndFunction但又不想重寫代碼,那么就可以通過繼承7.2.6為何還要在新版本中引進(jìn)重載所謂重載,就是建立兩個(gè)具有同樣名稱但是參數(shù)屬性不同的函數(shù)的過程。假設(shè)有GetCustomID函數(shù),根據(jù)輸入輸出用戶的ID號(hào)碼,那么該函數(shù)可能有以下兩種類型:7.2.6為何還要在新版本中引進(jìn)重載FunctionGetCustomerID(custnameasstring)AsInteger'通過用戶名獲得用戶IDEndFunctionFunctionGetCustomerID(purchaslong)AsInteger'根據(jù)購(gòu)物單號(hào)碼獲得用戶IDEndFunctionFunctionGetCustomerID(custnam通過重載,用戶就可以根據(jù)不同類型的輸入調(diào)用同一個(gè)函數(shù)。實(shí)際上現(xiàn)在的VisualBasic在某種程度上提供了重載的功能??紤]下面的函數(shù):FunctionGetCustomID(vINAsVariant)AsLongGetCustomID=vINEndFunction這時(shí)候,我們不妨可以試試下面兩種調(diào)用方式:ID=GetCustomID("123")或者:ID=GetCustomID(123)通過重載,用戶就可以根據(jù)不同類型的輸7.2.7多態(tài)的概念多態(tài)是在一個(gè)類中重新定義一個(gè)函數(shù)的過程。例如:需要建立一個(gè)基于BaseClass類的子類,但是又需要重新編寫GetCustomerName函數(shù),在新版的VisualBasic中,就可以這樣寫:7.2.7多態(tài)的概念I(lǐng)nheritsBaseClassFunctionGetOrders()OverridesFunctionGetOrders()...EndFunctionInheritsBaseClass7.2.8錯(cuò)誤處理(ErrorHandling)VisualBasic.NET的另外一個(gè)大的改進(jìn)就是錯(cuò)誤處理。VisualBasic將提供try...catch...finally結(jié)構(gòu),就像Delphi中的那樣。例如:SubSafeWrite()Try7.2.8錯(cuò)誤處理(ErrorHandling)Open"Testfile"...Write#1CatchKill"Testfile"FinallyClose#1EndTryEndSubOpen"Testfile"7.2.9建立線程新的VisualBasic語言結(jié)構(gòu)部分將包含建立多線程。一個(gè)線程建立的范例如下:sett=NewThread(NewThreadstart(AddressOf(BaseClass.Function1))從上面的范例還可以看到,VisualBasic.NET中的AddressOf函數(shù)將真正返回函數(shù)的指針。這在進(jìn)行API調(diào)用,例如回調(diào)函數(shù)方面將是很有幫助的。7.2.9建立線程7.3如何進(jìn)行程序升級(jí)如果想要將VisualBasic6.0的程序向VisualBasic.NET程序升級(jí),則首先還需要在自己的系統(tǒng)中安裝VisualBasic6.0,然后再安裝VisualBasic.NET,安裝好之后,直接運(yùn)行VisualBasic.NET。7.3如何進(jìn)行程序升級(jí)如果想要將具體操作步驟如下:(1)運(yùn)行VisualS主程序,啟動(dòng)VisualS。此時(shí)首先會(huì)出現(xiàn)一個(gè)如圖7-3-1所示的歡迎界面。(2)在程序進(jìn)入【起始頁】窗口后,就可以通過如圖7-3-2所示的選項(xiàng)來調(diào)用VisualBasic.NET語言進(jìn)行開發(fā)設(shè)計(jì)了。具體操作步驟如下:圖7-3-1VisualS歡迎界面圖7-3-1VisualS歡迎界面圖7-3-2調(diào)用VisualBasic.NET語言圖7-3-2調(diào)用VisualBasic.NET語言(3)如果需要新建項(xiàng)目,則直接單擊【新建項(xiàng)目】按鈕,在【新建項(xiàng)目】對(duì)話框中選擇“VisualBasic項(xiàng)目”后單擊【確定】按鈕就可進(jìn)入VisualBasic.NET編輯狀態(tài)了。如果是已經(jīng)用VisualBasic6.0開發(fā)好的程序,則可以單擊【打開項(xiàng)目】按鈕,選擇好要打開的項(xiàng)目后,將其升級(jí)就可以了。如圖7-3-3所示就是正在升級(jí)的VisualBasic程序。(3)如果需要新建項(xiàng)目,則直接單圖7-3-3正在升級(jí)的VisualBasic程序圖7-3-3正在升級(jí)的VisualBasic程序代碼在完成升級(jí)后,VisualBasic.NET會(huì)建立一個(gè)新的升級(jí)工程,如圖7-3-4所示,并且會(huì)在“任務(wù)列表”欄中列出無法在.NET中進(jìn)行升級(jí)的任務(wù)。代碼在完成升級(jí)后,VisualBa圖7-3-4完成升級(jí)的VisualBasic程序圖7-3-4完成升級(jí)的VisualBasic程序1.Variant類型到Object類型以前版本的VisualBasic支持Variant數(shù)據(jù)類型,該類型可以設(shè)定為除了固定程序字符串外的任何原始數(shù)據(jù)類型和Empty、Error、Nothing和Null。在VisualBasic、NET中,Object數(shù)據(jù)類型可以設(shè)定為任何原始數(shù)據(jù)類型和Empty、Error、Nothing、Null和對(duì)象指針。當(dāng)工程升級(jí)到VisualBasic.NET后,任何Variant定義都會(huì)改變?yōu)镺bject。同樣,當(dāng)在編輯器中插入代碼時(shí),Variant關(guān)鍵字也會(huì)被替換為Object。1.Variant類型到Object2.Integer數(shù)據(jù)類型到Short數(shù)據(jù)類型在VisualBasic6.0中,16bit數(shù)稱為Short。32bit數(shù)稱為Integer(64bit數(shù)稱為L(zhǎng)ong)。當(dāng)工程升級(jí)后,數(shù)據(jù)定義會(huì)做如下改動(dòng):DimxAsIntegerdimyasLong更改為:DimxAsShortdimyasInteger2.Integer數(shù)據(jù)類型到Shor3.屬性語法VisualBasic.NET對(duì)于自定義屬性的語法做了更加直觀的更改,將Get和Set合而為一。例如原來的屬性如下:PropertyGetMyProperty()AsIntegerm_MyProperty=MyPropertyEndPropertyPropertyLetMyProperty(NewValueAsInteger)m_MyProperty=NewValueEndProperty3.屬性語法PropertyGet升級(jí)后更改為:PropertyMyProperty()AsShortGetm_MyProperty=MyPropertyEndGetSetm_MyProperty=ValueEndSetEndProperty升級(jí)后更改為:4.VisualBasic窗體到Windows窗體VisualBasic.NET包含新的窗體包和Windows窗體,Windows窗體包含內(nèi)含菜單編輯器,升級(jí)后的VisualBasic窗體會(huì)升級(jí)到Windows窗體。5.界面在先前的版本中,公用類界面對(duì)于用戶總是隱藏的。在VisualBasic.NET中,公用類可以在代碼窗口中瀏覽和編輯。4.VisualBasic窗體到W6.升級(jí)報(bào)告及注釋當(dāng)工程升級(jí)后,升級(jí)報(bào)告會(huì)添加到用戶的工程中,其中詳細(xì)列出所有升級(jí)后所需要對(duì)代碼做的更改。6.升級(jí)報(bào)告及注釋7.3.1使用先前綁定的對(duì)象VisualBasic6.0和VisualBasic.NET都支持對(duì)象的延遲綁定,該方法事先定義一個(gè)變量為Object的數(shù)據(jù)類型,然后在運(yùn)行時(shí)將其設(shè)定為一個(gè)類。然而,在升級(jí)過程中,當(dāng)訪問延遲綁定對(duì)象的缺省屬性時(shí)可能會(huì)產(chǎn)生錯(cuò)誤。7.3.1使用先前綁定的對(duì)象7.3.2缺省屬性的運(yùn)用在VisualBasic6.0中,許多對(duì)象都有缺省屬性,缺省屬性在代碼中可以省略。例如:MsgBoxForm1.Text1.Text就可以這樣編寫:MsgBoxForm1.Text17.3.2缺省屬性的運(yùn)用其缺省屬性在代碼編譯時(shí)決定。同樣,也可以在延遲綁定的對(duì)象中使用缺省屬性,例如:DimobjAsObjectSetobj=Form1.Text1MsgBoxobj其缺省屬性在代碼編譯時(shí)決定。同樣,也DimobjAsObjectSetobj=Me.Text1MsgBoxobj '不好的代碼,使用缺省屬性MsgBoxMe.Text1 '不好的代碼,使用缺省屬性u(píng)se:DimobjAsObjectSetobj=Me.Text1MsgBoxobj.Text '好的代碼,寫出了屬性MsgBoxMe.Text1.Text '好的代碼,寫出了屬性DimobjAsObject雖然缺省屬性不被VisualBasic.NET支持,但是帶參數(shù)的缺省屬性是被支持的。要了解它們之間的區(qū)別,請(qǐng)看下面的范例:DimrsAsADODB.Recordsetrs("CompanyName")="SomeCompany"rs!CompanyName="SomeCompany"這實(shí)際上等于:DimrsAsADODB.Recordsetrs.Fields("CompanyName").Value="SomeCompany"rs.Fields!CompanyName.Value="SomeCompany"雖然缺省屬性不被VisualBas對(duì)于第二種寫法,VisualBasic.NET是支持的,然而第一種情況不被支持。那么正確的用法應(yīng)該如下:DimrsAsADODB.Recordsetrs("CompanyName").Value="SomeCompany"rs!CompanyName.Value="SomeCompany"對(duì)于第二種寫法,VisualBasic7.3.3對(duì)Boolean類型數(shù)據(jù)使用AND/OR/NOT操作And和Or關(guān)鍵字在VisualBasic.NET和VisualBasic6.0中的使用是不同的。在VisualBasic6.0中,AND運(yùn)算既執(zhí)行邏輯AND操作也執(zhí)行逐位AND操作,這取決于操作數(shù)(如果是Boolean類型,執(zhí)行邏輯AND操作;如果是數(shù)字,執(zhí)行逐位AND操作)。在VisualBasic.NET中,AND運(yùn)算只執(zhí)行邏輯AND操作。7.3.3對(duì)Boolean類型數(shù)據(jù)使用AND/O對(duì)于逐位操作,在VisualBasic.NET提供了一組操作:BitAnd、BitOr、BitNot以及BitXor。下面是演示這些差異的范例程序:DimaAsIntegerDimbAsIntegerDimcAsBooleana=1b=2c=aAndbMsgBox("Theansweris"&c)對(duì)于逐位操作,在VisualBa當(dāng)上面的代碼在VisualBasic6.0下運(yùn)行時(shí),結(jié)果是False(執(zhí)行逐位AND操作);然而在VisualBasic.NET下,結(jié)果是True(執(zhí)行邏輯AND操作)。用戶要確定自己的程序在升級(jí)后其運(yùn)行結(jié)果同升級(jí)前一樣。VisualBasic.NET包含了VB6.And、VB6.Or以及VB6.Not的兼容函數(shù),這些函數(shù)執(zhí)行的結(jié)果同VisualBasic6.0下的AND/OR/NOT操作的執(zhí)行結(jié)果是一樣的。當(dāng)上面的代碼在VisualBasi當(dāng)代碼升級(jí)后,結(jié)果會(huì)像下面這樣:DimaAsShortDimbAsShortDimcAsBooleana=1b=2c=VB6.And(a,b)MsgBox("Theansweris"&c)當(dāng)代碼升級(jí)后,結(jié)果會(huì)像下面這樣:升級(jí)后的代碼會(huì)得出False的結(jié)果,這同在VisualBasic6.0下運(yùn)行是一樣的。如果不想自己的代碼升級(jí)后使用兼容函數(shù),就需要確保自己的AND/OR/NOT都使用在Boolean類型數(shù)據(jù)的操作中。升級(jí)后的代碼會(huì)得出False的結(jié)果例如,如果上面的代碼更改為下面的形式:DimaAsIntegerDimbAsIntegerDimcAsBooleana=1b=2c=a<>0Andb<>0MsgBox("Theansweris"&c)例如,如果上面的代碼更改為下面的形式:則當(dāng)升級(jí)后,代碼同原來的幾乎一樣:DimaAsShortDimbAsShortDimcAsBooleana=1b=2c=a<>0Andb<>0MsgBox("Theansweris"&c)則當(dāng)升級(jí)后,代碼同原來的幾乎一樣:與前面不同的是,每一個(gè)操作都是在Boolean數(shù)據(jù)之間進(jìn)行的,因此它們?cè)赩isualBasic6.0中使用的都是邏輯AND操作,所以在升級(jí)到VisualBasic.NET后不會(huì)發(fā)生改變。這樣做的意義是你可以直接在VisualBasic.NET和VisualBasic6.0之間拷貝和粘貼代碼,你的代碼會(huì)運(yùn)行的更快,因?yàn)槭褂玫氖潜镜氐腁ND操作而不是兼容函數(shù)。另外一個(gè)需要考慮的問題是,對(duì)于函數(shù)結(jié)果的AND/OR/NOT操作的問題。如下面的范例:DimbAsBooleanb=Function1()AndFunction2()與前面不同的是,每一個(gè)操作都是在Bo在VisualBasic6.0中,F(xiàn)unction1和Function2的結(jié)果都會(huì)執(zhí)行,而后再將結(jié)果進(jìn)行AND操作。在VisualBasic.NET中,只有當(dāng)Function1的結(jié)果為True時(shí)才會(huì)計(jì)算Function2。因?yàn)閂isualBasic.NET中的AND運(yùn)算執(zhí)行的是邏輯AND操作,如果Function1結(jié)果為False,AND結(jié)果肯定是False,為了加快速度就不再執(zhí)行Function2了。在VisualBasic6.0中下面的代碼說明了VisualBasic6.0和VisualBasic.NET之間的不同:DimiAsIntegeri=TrueIfi=?1ThenMsgBox("True")ElseMsgBox("False")EndIf下面的代碼說明了VisualBas在VisualBasic6.0中,結(jié)果為True;而在VisualBasic.NET中結(jié)果為False。如果對(duì)代碼做如下改動(dòng),程序在兩種語言下運(yùn)行都會(huì)顯示True。DimiAsBooleani=TrueIfi=TrueThenMsgBox("True")ElseMsgBox("False")EndIf在VisualBasic6.0中通過上面的范例可以看出,在程序中需要注意兩點(diǎn):(1)使用常量True和False來判斷是否而不要使用0和-1。(2)使用Boolean類型變量?jī)?chǔ)存Boolean數(shù)值而不要使用Integer類型變量。通過上面的范例可以看出,在程序中需要注7.3.4使用VB常量而不使用它們所代表的值在寫代碼的時(shí)候,盡量使用VB常量而不要使用它們所代表的值。例如用戶要在運(yùn)行時(shí)將一個(gè)窗口最大化,使用:

7.3.4使用VB常量而不使用它們所代表的值Me.WindowState=vbMaximized'Good:Constantname而不要使用:Me.WindowStyle=2'Bad:UnderlyingvalueMe.WindowStyle=X'Bad:VariableMe.WindowState=vbMaximized7.3.5避免Null傳播(Propagation)先前版本的VisualBasic支持Null傳播。Null傳播的前提是Null值使用在表達(dá)式中,表達(dá)式的結(jié)果將是Null。例如下面的范例,結(jié)果V都將是Null。DimVV=1+NullV=Null+Right$("SomeText",1)V=Right("SomeText",0)7.3.5避免Null傳播(Propagatio在VisualBasic.NET中,下面的函數(shù)將不再返回Null值:ChrMidCommandOctCurDirRightDateRTrimEnvironSpaceErrorStrHexTimeLCaseTrimLTrimUCase在VisualBasic.NET中,下面的函數(shù)將不再返回N7.3.6窗體與控件VisualBasic.NET包含了一個(gè)新的窗體包:Windows窗體。Windows窗體與VisualBasic6.0窗體間保持了最大的兼容性。然而,還是有一些需要提出的關(guān)鍵差異:●Windows窗體不支持OLEcontainer控件?!裥枰赩isualBasic6.0應(yīng)用中避免使用該控件。7.3.6窗體與控件7.3.7使用以0為下界的數(shù)組VisualBasic6.0允許使用任何整數(shù)數(shù)字作為一個(gè)數(shù)組的上界和下界,同樣也可以通過ReDim將一個(gè)Variant重新定義為數(shù)組。為了能夠與.NET平臺(tái)下的其他語言協(xié)同工作,VisualBasic.NET數(shù)組必須以0作為下界,而且只有一個(gè)變量事先定義為數(shù)組后才可以使用ReDim函數(shù)重新定義。雖然這樣限制了數(shù)組定義的靈活性,但這樣可以在VisualBasic.NET和.NET下的其他語言之間傳遞數(shù)組。7.3.7使用以0為下界的數(shù)組下面的范例說明了新的定義數(shù)組的約束:Dima(1To10)AsInteger '錯(cuò)誤:下界必須為0DimvReDimv(10)'錯(cuò)誤,在沒有定義v為數(shù)組前不能使用ReDimDimb(10)AsInteger '正確ReDimb(5)AsInteger '正確下面的范例說明了新的定義數(shù)組的約束:7.3.8用戶自定義數(shù)據(jù)類型中的數(shù)組和固定長(zhǎng)度字符串為了使VisualBasic.NET數(shù)組和數(shù)據(jù)結(jié)構(gòu)完全兼容VisualStudio.NET,固定長(zhǎng)度字符串在新語言中不再被支持。在大多數(shù)情況下這不是問題,因?yàn)閂isualBasic.NET提供了兼容固定長(zhǎng)度字符串定義的類,那么代碼:DimMyFixedLengthStringAsString*100升級(jí)后會(huì)變成這樣:DimMyFixedLengthStringAsNewVB6.FixedLengthString(100)7.3.8用戶自定義數(shù)據(jù)類型中的數(shù)組和固定長(zhǎng)度字例如:PrivateTypeMyTypeMyArray(5)AsIntegerMyFixedStringAsString*100EndTypeSubBar()DimMyVariableAsMyTypeEndSub升級(jí)后會(huì)變?yōu)椋篜rivateTypeMyTypeMyArray()AsInteger例如:MyFixedStringAsStringEndTypeSubBar()DimMyVariableAsMyTypeReDimMyVariable.MyArray(5)AsIntegerMyVariable.MyFixedString=String$(100,"")EndSubAvoidLegacyFeaturesMyFixedStringAsString為避免使用從原始Basic繼承的特性,如下的關(guān)鍵字在新版本語言中將不再出現(xiàn):DefComputedGoTo/GoSubGoSub/ReturnOptionBase0|1VarPtr,ObjPtr,StrPtrLSetWindowsAPIs為避免使用從原始Basic繼承的特性大多數(shù)的API調(diào)用可以像在VisualBasic6.0中一樣使用,因?yàn)閿?shù)據(jù)類型發(fā)生了改變。在VisualBasic6.0中的Long類型在VisualBasic.NET中定義為Integer類型。在升級(jí)過程中這些定義會(huì)自動(dòng)改變,例如:PrivateDeclareFunctionGetVersionLib"kernel32"()AsLongFunctionGetVer()DimVerAsLongVer=GetVersion()MsgBox("SystemVersionis"&Ver)EndFunction大多數(shù)的API調(diào)用可以像在Visua改變?yōu)椋篜rivateDeclareFunctionGetVersionLib"kernel32"()AsIntegerFunctionGetVer()DimVerAsIntegerVer=GetVersion()MsgBox("SystemVersionis"&Ver)EndFunction改變?yōu)椋撼藬?shù)字類型的升級(jí)外,VisualBasic6.0還支持固定長(zhǎng)度字符串類型,該類型升級(jí)到VisualBasic.NET后會(huì)定義為固定長(zhǎng)度字符串兼容類。所以在VisualBasic6.0代碼中最好使用通用字符串定義,例如:PrivateDeclareFunctionGetUserNameLib"advapi32.dll"Alias"GetUserNameA"(ByVallpBufferAsString,ByRefnSizeAsLong)AsLong除了數(shù)字類型的升級(jí)外,VisualFunctionGetUser()DimRetAsLongDimUserNameAsStringDimBufferAsString*25Ret=GetUserName(Buffer,25)UserName=Left$(Buffer,InStr(Buffer,Chr(0))-1)MsgBox(UserName)EndFunctionFunctionGetUser()上面的代碼出現(xiàn)了固定長(zhǎng)度字符串,最好更改為:DimBufferAsStringBuffer=String$(25,"")升級(jí)到VisualBasic.NET后會(huì)成為下面的樣子:DeclareFunctionGetUserNameLib"advapi32.dll"Alias"GetUserNameA"(ByVallpBufferAsString,ByRefnSizeAsInteger)AsInteger上面的代碼出現(xiàn)了固定長(zhǎng)度字符串,最好更改為:FunctionGetUser()DimRetAsIntegerDimUserNameAsStringDimBufferAsStringBuffer=NewString(CChar(""),25)Ret=GetUserName(Buffer,25)UserName=Left(Buffer,InStr(Buffer,Chr(0))?1)MsgBox(UserName)EndFunctionFunctionGetUser()有三種情況需要對(duì)代碼進(jìn)行手工改進(jìn):(1)在傳遞給API函數(shù)的自定義數(shù)據(jù)類型定義中包含固定長(zhǎng)度字符串和數(shù)組。在VisualBasic.NET中用戶需要對(duì)自定義數(shù)據(jù)類型定義中的每一個(gè)固定長(zhǎng)度字符串和數(shù)組添加MarshallAs屬性。(2)在定義中使用AsAny聲明。這種聲明不再被VisualBasic.NET支持,變量定義為AsAny通常是為了傳遞一個(gè)既可能是字符串也可能是Null的變量。有三種情況需要對(duì)代碼進(jìn)行手工改進(jìn):第7章將VB6.0程序移植到VB.net7.1什么是VisualBasic.NET(VB.net)

7.2VB.net程序的基本結(jié)構(gòu)7.3如何進(jìn)行程序升級(jí)第7章將VB6.0程序移植到VB.net7.1什么在線教務(wù)輔導(dǎo)網(wǎng):教材其余課件及動(dòng)畫素材請(qǐng)查閱在線教務(wù)輔導(dǎo)網(wǎng)QQ:349134187或者直接輸入下面地址:在線教務(wù)輔導(dǎo)網(wǎng):http://www.shangfuwang7.1什么是VisualBasic.NET(VB.net)VisualBasic.NET是最新一代的VisualBasic語言。它并不是簡(jiǎn)單地在VisualBasic6.0上添加一些新特性而已,微軟重新設(shè)計(jì)了產(chǎn)品以便使開發(fā)者能夠更加容易地開發(fā)分布式應(yīng)用,例如基于Web的程序以及多層系統(tǒng)。7.1什么是VisualBasic.NET(VB.neVisualBasic.NET中有兩種窗體包:Windows窗體以及Web窗體。一個(gè)新版的ADO.NET用于接受離線數(shù)據(jù)源。新的語言,移走了原來的關(guān)鍵字,提高Type數(shù)據(jù)的安全性以及提供低級(jí)別結(jié)構(gòu)以滿足高級(jí)別開發(fā)者的需求。VisualBasic.NET中7.1.1為何VB.net不提供100%的繼承性當(dāng)在設(shè)計(jì)VisualBasic.NET時(shí)有兩個(gè)方向:翻新以及完全新建。為了提供給用戶盡可能多的新特性(例如繼承以及線程特性),為了提供對(duì)新平臺(tái)的完全訪問,以及為了使VisualBasic能夠完全轉(zhuǎn)移到下一代的Web應(yīng)用中,正確的選擇是完全新建。7.1.1為何VB.net不提供100%的繼承性一個(gè)重要的目標(biāo)是使VisualBasic代碼可以完全集成到用其他語言編寫的代碼中,例如MicrosftC#(讀CSharp)或者VisualC++,以及讓VisualBasic開發(fā)者可以完全而且簡(jiǎn)單地利用.NET框架的功能,而不需要像原來那樣使用WindowsAPI調(diào)用。一個(gè)重要的目標(biāo)是使VisualBa所有的Visual語言將與其他面向通用運(yùn)行時(shí)的語言(CommonLanguageRuntime)使用相同的數(shù)據(jù)定義類型、數(shù)組、用戶自定義數(shù)組、類以及界面。不過這樣就要做出一些犧牲,例如固定長(zhǎng)度字符串以及以非0數(shù)為下界的數(shù)組將不再被支持。VisualBasic現(xiàn)在已經(jīng)成為一個(gè)真正面向?qū)ο蟮恼Z言,一些不一致的特性,例如GoSub/Return語句以及DefInt語句已經(jīng)從新語言中移走了。所有的Visual語言將與其他面向7.1.2如何將VB6.0程序升級(jí)到VB.netVisualBasic.NET原則上可以使傳統(tǒng)的Windows開發(fā)者轉(zhuǎn)移到建立下一代Web以及多層應(yīng)用中。所以,用戶的代碼需要升級(jí)以適應(yīng)VisualBasic.NET。在使用VisualBasic.NET打開VisualBasic6.0工程后,通過自動(dòng)升級(jí)工具可以一步步地升級(jí)并建立一個(gè)新的基于VisualBasic.NET的工程。這個(gè)升級(jí)是單向的,即新的VisualBasic.NET工程無法再在VisualBasic6.0中打開。7.1.2如何將VB6.0程序升級(jí)到VB.net7.1.3讓VB6.0和VB.net同時(shí)工作VisualBasic.NET支持升級(jí)VisualBasic6.0生成的工程,但如果該工程是在VisualBasic1~5版本下編寫的,則需要首先升級(jí)到VisualBasic6.0工程,編譯、保存后再升級(jí)到VisualBasic.NET中去。7.1.3讓VB6.0和VB.net同時(shí)工作VisualBasic.NET和VisualBasic6.0可以安裝在同一系統(tǒng)下并可以同時(shí)運(yùn)行。同樣,利用較早版本或者其他語言編寫的COM組件也可以集成到VisualBasic.NET中。VisualBasic.NET編譯的組件與VisualBasic6.0編譯的組件相比有一點(diǎn)點(diǎn)的不同,VisualBasic.NET對(duì)象是通過垃圾收集方式釋放的,所以在對(duì)象被刪除到對(duì)象真正被從內(nèi)存中釋放之間或許會(huì)有一定的延遲。VisualBasic.NET和7.2VB.net程序的基本結(jié)構(gòu)7.2.1基于瀏覽器的應(yīng)用VisualBasic6.0和VisualStudio6提供了以下的技術(shù)用于建立基于瀏覽器的Internet和Intranet應(yīng)用:Webclasses、DHTMLprojects、ActiveXDocuments、ActiveServerPages(ASP)。7.2VB.net程序的基本結(jié)構(gòu)7.2.1基于VisualBasic.NET中引入了ASP.NET。ASP.NET是增強(qiáng)版的ASP,并加入到了Web窗體(WebForms)結(jié)構(gòu)中。Web窗體是.NET架構(gòu)中非常重要的一個(gè)組成部分。一個(gè)Web窗體包含兩個(gè)部分:HTML文件和源程序文件。HTML文件用于描述頁面;源程序文件用于響應(yīng)、控制頁面事件。建立一個(gè)Web窗體與現(xiàn)在建立一個(gè)VisualBasic窗體一樣簡(jiǎn)單。它的Wysiwyg界面設(shè)計(jì)方式同現(xiàn)在的VisualBasic是一樣的。VisualBasic.NET中引一些介紹以及結(jié)構(gòu)方面的建議:(1)建議使用微軟多層構(gòu)架來開發(fā)自己的應(yīng)用,利用ASP來開發(fā)界面,同時(shí)使用VisualBasic6.0或者VisualC++6.0開發(fā)的COM組件。(2)包含DHTML頁面及客戶端DLL的DHTML應(yīng)用不能自動(dòng)升級(jí)到VisualBasic.NET。建議用戶在VisualBasic6.0下開發(fā)這些應(yīng)用。(3)同DHTML工程一樣,ActiveXDocuments不被VisualBasic.NET支持,不能自動(dòng)升級(jí)。一些介紹以及結(jié)構(gòu)方面的建議:(4)Web類(Webclasses)在VisualBasic.NET中將不再存在,Web類應(yīng)用將升級(jí)到ASP.NET,但自動(dòng)升級(jí)后用戶還需要做一些更改。(4)Web類(Webclasse7.2.2用戶控件VisualBasic.NET提供了新的窗體包:Windows窗體。相對(duì)于VisualBasic6.0的窗體,Windows窗體使用不同的對(duì)象模塊,不過絕大部分是兼容的。當(dāng)工程升級(jí)時(shí),VisualBasic窗體自動(dòng)升級(jí)到Windows窗體。7.2.2用戶控件對(duì)于開發(fā)中間層的MTSandCOM+服務(wù)器組件,VisualBasic.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)試(組件需要以nativecode方式編譯,包含符號(hào)調(diào)試信息以及不進(jìn)行優(yōu)化)。VisualBasic.NET同樣也提供了新的中間層組件:WebServices(Web服務(wù)器)。Web服務(wù)器包含在ASP.NET中。對(duì)于開發(fā)中間層的MTSandC7.2.3單層應(yīng)用VisualBasic6.0支持建立以下類型的單層應(yīng)用程序:●單層數(shù)據(jù)庫(kù)應(yīng)用程序;●VisualBasic插件;●普通的應(yīng)用程序以及游戲。7.2.3單層應(yīng)用7.2.4數(shù)據(jù)庫(kù)操作VisualBasic6.0提供了ADO、RDO和DAO三種類型的數(shù)據(jù)庫(kù)訪問方式,而VisualBasic.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窗體。7.2.4數(shù)據(jù)庫(kù)操作7.2.5語言方面的改進(jìn)我們?cè)诤芏嗟木幊陶搲蛘咝侣劷M中可以看到C++的擁護(hù)者將VisualBasic稱為一個(gè)玩具語言(ToyLanguage)。其中,VisualBasic最被人詬病的就是它不真正支持面向?qū)ο缶幊?OOP)。在新的VisualBasic中,這些都將成為過去。7.2.5語言方面的改進(jìn)而VisualBasic.NET將真正支持OOP、繼承(Inheritance)、多態(tài)(Polymorphism)以及重載(Overloading)。當(dāng)然,還包括一些新的數(shù)據(jù)結(jié)構(gòu)、結(jié)構(gòu)性的錯(cuò)誤控制(ErrorHanding)以及線程等,這些都將被新的VisualBasic.NET所支持。而VisualBasic.NET假設(shè)我們編寫了一個(gè)只包含一個(gè)函數(shù)的名稱為BaseClass的基本類:FunctionGetCustomerName()'DosomestuffEndFunction如果想建立一個(gè)新類,并使用BaseClass中的GetCustomerName函數(shù),假設(shè)我們編寫了一個(gè)只包含一個(gè)函數(shù)的但又不想重寫代碼,那么就可以通過繼承來這樣編寫新類:InheritsBaseClassFunctionGetCustomerID()'DosomestuffEndFunction但又不想重寫代碼,那么就可以通過繼承7.2.6為何還要在新版本中引進(jìn)重載所謂重載,就是建立兩個(gè)具有同樣名稱但是參數(shù)屬性不同的函數(shù)的過程。假設(shè)有GetCustomID函數(shù),根據(jù)輸入輸出用戶的ID號(hào)碼,那么該函數(shù)可能有以下兩種類型:7.2.6為何還要在新版本中引進(jìn)重載FunctionGetCustomerID(custnameasstring)AsInteger'通過用戶名獲得用戶IDEndFunctionFunctionGetCustomerID(purchaslong)AsInteger'根據(jù)購(gòu)物單號(hào)碼獲得用戶IDEndFunctionFunctionGetCustomerID(custnam通過重載,用戶就可以根據(jù)不同類型的輸入調(diào)用同一個(gè)函數(shù)。實(shí)際上現(xiàn)在的VisualBasic在某種程度上提供了重載的功能。考慮下面的函數(shù):FunctionGetCustomID(vINAsVariant)AsLongGetCustomID=vINEndFunction這時(shí)候,我們不妨可以試試下面兩種調(diào)用方式:ID=GetCustomID("123")或者:ID=GetCustomID(123)通過重載,用戶就可以根據(jù)不同類型的輸7.2.7多態(tài)的概念多態(tài)是在一個(gè)類中重新定義一個(gè)函數(shù)的過程。例如:需要建立一個(gè)基于BaseClass類的子類,但是又需要重新編寫GetCustomerName函數(shù),在新版的VisualBasic中,就可以這樣寫:7.2.7多態(tài)的概念I(lǐng)nheritsBaseClassFunctionGetOrders()OverridesFunctionGetOrders()...EndFunctionInheritsBaseClass7.2.8錯(cuò)誤處理(ErrorHandling)VisualBasic.NET的另外一個(gè)大的改進(jìn)就是錯(cuò)誤處理。VisualBasic將提供try...catch...finally結(jié)構(gòu),就像Delphi中的那樣。例如:SubSafeWrite()Try7.2.8錯(cuò)誤處理(ErrorHandling)Open"Testfile"...Write#1CatchKill"Testfile"FinallyClose#1EndTryEndSubOpen"Testfile"7.2.9建立線程新的VisualBasic語言結(jié)構(gòu)部分將包含建立多線程。一個(gè)線程建立的范例如下:sett=NewThread(NewThreadstart(AddressOf(BaseClass.Function1))從上面的范例還可以看到,VisualBasic.NET中的AddressOf函數(shù)將真正返回函數(shù)的指針。這在進(jìn)行API調(diào)用,例如回調(diào)函數(shù)方面將是很有幫助的。7.2.9建立線程7.3如何進(jìn)行程序升級(jí)如果想要將VisualBasic6.0的程序向VisualBasic.NET程序升級(jí),則首先還需要在自己的系統(tǒng)中安裝VisualBasic6.0,然后再安裝VisualBasic.NET,安裝好之后,直接運(yùn)行VisualBasic.NET。7.3如何進(jìn)行程序升級(jí)如果想要將具體操作步驟如下:(1)運(yùn)行VisualS主程序,啟動(dòng)VisualS。此時(shí)首先會(huì)出現(xiàn)一個(gè)如圖7-3-1所示的歡迎界面。(2)在程序進(jìn)入【起始頁】窗口后,就可以通過如圖7-3-2所示的選項(xiàng)來調(diào)用VisualBasic.NET語言進(jìn)行開發(fā)設(shè)計(jì)了。具體操作步驟如下:圖7-3-1VisualS歡迎界面圖7-3-1VisualS歡迎界面圖7-3-2調(diào)用VisualBasic.NET語言圖7-3-2調(diào)用VisualBasic.NET語言(3)如果需要新建項(xiàng)目,則直接單擊【新建項(xiàng)目】按鈕,在【新建項(xiàng)目】對(duì)話框中選擇“VisualBasic項(xiàng)目”后單擊【確定】按鈕就可進(jìn)入VisualBasic.NET編輯狀態(tài)了。如果是已經(jīng)用VisualBasic6.0開發(fā)好的程序,則可以單擊【打開項(xiàng)目】按鈕,選擇好要打開的項(xiàng)目后,將其升級(jí)就可以了。如圖7-3-3所示就是正在升級(jí)的VisualBasic程序。(3)如果需要新建項(xiàng)目,則直接單圖7-3-3正在升級(jí)的VisualBasic程序圖7-3-3正在升級(jí)的VisualBasic程序代碼在完成升級(jí)后,VisualBasic.NET會(huì)建立一個(gè)新的升級(jí)工程,如圖7-3-4所示,并且會(huì)在“任務(wù)列表”欄中列出無法在.NET中進(jìn)行升級(jí)的任務(wù)。代碼在完成升級(jí)后,VisualBa圖7-3-4完成升級(jí)的VisualBasic程序圖7-3-4完成升級(jí)的VisualBasic程序1.Variant類型到Object類型以前版本的VisualBasic支持Variant數(shù)據(jù)類型,該類型可以設(shè)定為除了固定程序字符串外的任何原始數(shù)據(jù)類型和Empty、Error、Nothing和Null。在VisualBasic、NET中,Object數(shù)據(jù)類型可以設(shè)定為任何原始數(shù)據(jù)類型和Empty、Error、Nothing、Null和對(duì)象指針。當(dāng)工程升級(jí)到VisualBasic.NET后,任何Variant定義都會(huì)改變?yōu)镺bject。同樣,當(dāng)在編輯器中插入代碼時(shí),Variant關(guān)鍵字也會(huì)被替換為Object。1.Variant類型到Object2.Integer數(shù)據(jù)類型到Short數(shù)據(jù)類型在VisualBasic6.0中,16bit數(shù)稱為Short。32bit數(shù)稱為Integer(64bit數(shù)稱為L(zhǎng)ong)。當(dāng)工程升級(jí)后,數(shù)據(jù)定義會(huì)做如下改動(dòng):DimxAsIntegerdimyasLong更改為:DimxAsShortdimyasInteger2.Integer數(shù)據(jù)類型到Shor3.屬性語法VisualBasic.NET對(duì)于自定義屬性的語法做了更加直觀的更改,將Get和Set合而為一。例如原來的屬性如下:PropertyGetMyProperty()AsIntegerm_MyProperty=MyPropertyEndPropertyPropertyLetMyProperty(NewValueAsInteger)m_MyProperty=NewValueEndProperty3.屬性語法PropertyGet升級(jí)后更改為:PropertyMyProperty()AsShortGetm_MyProperty=MyPropertyEndGetSetm_MyProperty=ValueEndSetEndProperty升級(jí)后更改為:4.VisualBasic窗體到Windows窗體VisualBasic.NET包含新的窗體包和Windows窗體,Windows窗體包含內(nèi)含菜單編輯器,升級(jí)后的VisualBasic窗體會(huì)升級(jí)到Windows窗體。5.界面在先前的版本中,公用類界面對(duì)于用戶總是隱藏的。在VisualBasic.NET中,公用類可以在代碼窗口中瀏覽和編輯。4.VisualBasic窗體到W6.升級(jí)報(bào)告及注釋當(dāng)工程升級(jí)后,升級(jí)報(bào)告會(huì)添加到用戶的工程中,其中詳細(xì)列出所有升級(jí)后所需要對(duì)代碼做的更改。6.升級(jí)報(bào)告及注釋7.3.1使用先前綁定的對(duì)象VisualBasic6.0和VisualBasic.NET都支持對(duì)象的延遲綁定,該方法事先定義一個(gè)變量為Object的數(shù)據(jù)類型,然后在運(yùn)行時(shí)將其設(shè)定為一個(gè)類。然而,在升級(jí)過程中,當(dāng)訪問延遲綁定對(duì)象的缺省屬性時(shí)可能會(huì)產(chǎn)生錯(cuò)誤。7.3.1使用先前綁定的對(duì)象7.3.2缺省屬性的運(yùn)用在VisualBasic6.0中,許多對(duì)象都有缺省屬性,缺省屬性在代碼中可以省略。例如:MsgBoxForm1.Text1.Text就可以這樣編寫:MsgBoxForm1.Text17.3.2缺省屬性的運(yùn)用其缺省屬性在代碼編譯時(shí)決定。同樣,也可以在延遲綁定的對(duì)象中使用缺省屬性,例如:DimobjAsObjectSetobj=Form1.Text1MsgBoxobj其缺省屬性在代碼編譯時(shí)決定。同樣,也DimobjAsObjectSetobj=Me.Text1MsgBoxobj '不好的代碼,使用缺省屬性MsgBoxMe.Text1 '不好的代碼,使用缺省屬性u(píng)se:DimobjAsObjectSetobj=Me.Text1MsgBoxobj.Text '好的代碼,寫出了屬性MsgBoxMe.Text1.Text '好的代碼,寫出了屬性DimobjAsObject雖然缺省屬性不被VisualBasic.NET支持,但是帶參數(shù)的缺省屬性是被支持的。要了解它們之間的區(qū)別,請(qǐng)看下面的范例:DimrsAsADODB.Recordsetrs("CompanyName")="SomeCompany"rs!CompanyName="SomeCompany"這實(shí)際上等于:DimrsAsADODB.Recordsetrs.Fields("CompanyName").Value="SomeCompany"rs.Fields!CompanyName.Value="SomeCompany"雖然缺省屬性不被VisualBas對(duì)于第二種寫法,VisualBasic.NET是支持的,然而第一種情況不被支持。那么正確的用法應(yīng)該如下:DimrsAsADODB.Recordsetrs("CompanyName").Value="SomeCompany"rs!CompanyName.Value="SomeCompany"對(duì)于第二種寫法,VisualBasic7.3.3對(duì)Boolean類型數(shù)據(jù)使用AND/OR/NOT操作And和Or關(guān)鍵字在VisualBasic.NET和VisualBasic6.0中的使用是不同的。在VisualBasic6.0中,AND運(yùn)算既執(zhí)行邏輯AND操作也執(zhí)行逐位AND操作,這取決于操作數(shù)(如果是Boolean類型,執(zhí)行邏輯AND操作;如果是數(shù)字,執(zhí)行逐位AND操作)。在VisualBasic.NET中,AND運(yùn)算只執(zhí)行邏輯AND操作。7.3.3對(duì)Boolean類型數(shù)據(jù)使用AND/O對(duì)于逐位操作,在VisualBasic.NET提供了一組操作:BitAnd、BitOr、BitNot以及BitXor。下面是演示這些差異的范例程序:DimaAsIntegerDimbAsIntegerDimcAsBooleana=1b=2c=aAndbMsgBox("Theansweris"&c)對(duì)于逐位操作,在VisualBa當(dāng)上面的代碼在VisualBasic6.0下運(yùn)行時(shí),結(jié)果是False(執(zhí)行逐位AND操作);然而在VisualBasic.NET下,結(jié)果是True(執(zhí)行邏輯AND操作)。用戶要確定自己的程序在升級(jí)后其運(yùn)行結(jié)果同升級(jí)前一樣。VisualBasic.NET包含了VB6.And、VB6.Or以及VB6.Not的兼容函數(shù),這些函數(shù)執(zhí)行的結(jié)果同VisualBasic6.0下的AND/OR/NOT操作的執(zhí)行結(jié)果是一樣的。當(dāng)上面的代碼在VisualBasi當(dāng)代碼升級(jí)后,結(jié)果會(huì)像下面這樣:DimaAsShortDimbAsShortDimcAsBooleana=1b=2c=VB6.And(a,b)MsgBox("Theansweris"&c)當(dāng)代碼升級(jí)后,結(jié)果會(huì)像下面這樣:升級(jí)后的代碼會(huì)得出False的結(jié)果,這同在VisualBasic6.0下運(yùn)行是一樣的。如果不想自己的代碼升級(jí)后使用兼容函數(shù),就需要確保自己的AND/OR/NOT都使用在Boolean類型數(shù)據(jù)的操作中。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論