出版時(shí)間:2009-2 出版社:清華大學(xué)出版社 作者:郭興峰,廖建軍,周明輝 編著 頁(yè)數(shù):349
前言
Microsoft Visual Basic 2005是從Visual Basic語(yǔ)言演變而來(lái)的,它是一種類型安全和面向?qū)ο蟮恼Z(yǔ)言。Visual Basic允許開發(fā)人員開發(fā)面向Windows、Web和移動(dòng)設(shè)備的程序。與所有基于Microsoft .NET Framework的語(yǔ)言一樣,使用Visual Basic編寫的程序都具有安全性和語(yǔ)言互操作性方面的優(yōu)點(diǎn)?! ”緯嫦騐isual Basic初中級(jí)用戶,全面、系統(tǒng)地介紹了使用Visual Basic 2005開發(fā)應(yīng)用程序的基礎(chǔ)知識(shí)、基本方法和具體應(yīng)用。當(dāng)然,如果您是一名高手,那么這本書也將是一本極好的參考書?! ”緯蓽\入深,層層遞進(jìn)地講解了使用Visual Basic 2005開發(fā)應(yīng)用程序的技術(shù)。本書共分為14章,包括Visual Studio 2005開發(fā)環(huán)境,Visual Basic語(yǔ)法,面向?qū)ο蠡靖拍畹慕榻B,Windows窗體和常用控件,菜單、工具欄和狀態(tài)欄,鼠標(biāo)和鍵盤事件,對(duì)話框,文件操作等技術(shù)的講解,以及使用Visual Basic開發(fā)數(shù)據(jù)庫(kù)程序、Web網(wǎng)站、ActiveX的應(yīng)用、應(yīng)用程序的調(diào)試和錯(cuò)誤處理等高級(jí)內(nèi)容,最后介紹了應(yīng)用程序的安裝和部署?! 〉?章對(duì)Visual Basic 2005進(jìn)行了簡(jiǎn)要介紹。首先介紹了.NET Framework,然后介紹了Visual Studio 2005的開發(fā)環(huán)境,最后通過(guò)一個(gè)實(shí)例介紹了如何使用Visual Basic開發(fā)一個(gè)Windows應(yīng)用程序?! 〉?章講解了程序設(shè)計(jì)基礎(chǔ)。首先介紹了數(shù)據(jù)類型和表達(dá)式,然后介紹了程序結(jié)構(gòu)——順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),最后介紹了子過(guò)程和函數(shù)?! 〉?章講解了面向?qū)ο蟮某绦蛟O(shè)計(jì)的基本思想。首先講解了面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念,然后講解了類和對(duì)象,最后講解了命名空間和Me關(guān)鍵字?! 〉?章講解了Windows窗體。首先介紹了窗體的屬性、方法和事件,然后講解了多文檔和單文檔的概念,最后通過(guò)一個(gè)例子展示了多文檔程序的開發(fā)過(guò)程?! 〉?章講解了Windows常用控件。主要包括Label、TextBox、Button、CheckBox、Radio Button、ListBox、Combobox、ListView、TreeView、TabControl等內(nèi)容。通過(guò)對(duì)這些控件的學(xué)習(xí),讀者可以達(dá)到舉一反三的效果?! 〉?章講解了菜單、工具欄和狀態(tài)欄。首先介紹了主菜單和彈出式菜單,然后介紹了工具欄的使用,最后介紹了狀態(tài)欄的設(shè)計(jì)和使用。 第7章講解了鼠標(biāo)和鍵盤事件。首先介紹了鼠標(biāo)的常見事件,然后介紹了鍵盤事件以及檢測(cè)Shift、Ctrl及Alt鍵的狀態(tài),最后介紹了如何中斷后臺(tái)處理?! 〉?章講解了對(duì)話框。首先介紹了通用對(duì)話框,包括顏色對(duì)話框、字體對(duì)話框、打開文件對(duì)話框、保存文件對(duì)話框以及瀏覽目錄對(duì)話框,然后介紹了預(yù)定義對(duì)話框,最后介紹了自定義對(duì)話框?! 〉?章介紹了文件操作。首先介紹了文件的基本概念,然后介紹了如何創(chuàng)建文件以及對(duì)文件進(jìn)行刪除和讀寫操作,最后介紹了如何操作文件夾?! 〉?0章介紹了如何開發(fā)數(shù)據(jù)庫(kù)程序。首先介紹了ADO.NET的基本概念。然后介紹了.NET數(shù)據(jù)提供程序的Connection對(duì)象、Command對(duì)象、DataReader對(duì)象、DataAdapter對(duì)象。最后介紹了DataSet組件的結(jié)構(gòu)和用法?! 〉?1章介紹了Web應(yīng)用程序開發(fā)。首先介紹了如何建立Web應(yīng)用程序的運(yùn)行環(huán)境,然后介紹了Visual Basic .NET在開發(fā)Web應(yīng)用程序時(shí)的作用,最后介紹了Visual Basic .NET開發(fā)Web程序的常用類和常用控件?! 〉?2章介紹了如何使用ActiveX部件。主要包括使用ActiveX部件的步驟、釋放ActiveX部件、處理ActiveX部件的運(yùn)行錯(cuò)誤和掛起的請(qǐng)求。最后通過(guò)使用多媒體控件MMControl詳細(xì)地講解了使用ActiveX部件的步驟?! 〉?3章介紹了應(yīng)用程序的調(diào)試和錯(cuò)誤處理。首先介紹了應(yīng)用程序的調(diào)試,然后介紹了如何對(duì)應(yīng)用程序的錯(cuò)誤進(jìn)行處理。 第14章介紹了應(yīng)用程序的安裝和部署。程序員工作的最終目的是把開發(fā)的程序交付給用戶使用,這部分內(nèi)容講解了如何對(duì)Windows應(yīng)用程序和Web程序進(jìn)行打包。為了運(yùn)行這些代碼,讀者需要配置一個(gè)運(yùn)行環(huán)境,需要安裝Visual Basic 2005中文企業(yè)版,詳細(xì)的配置請(qǐng)參考本書具體章節(jié)的介紹?! ”緯闪谓ㄜ?、周明輝、王艷梅編寫,參與本書編寫和修改的還有葉明、崔寧、盧宏、汪昔玉、衛(wèi)平峰、程冬丁、王勤、張銳、汪小鋒、李葵、葉浩、肖飛、宋海劍、林勇、朱衡等人員。在此,編者對(duì)他們致以誠(chéng)摯的謝意! 由于本書涉及的范圍比較廣泛,作者的經(jīng)驗(yàn)有限,時(shí)間倉(cāng)促,書中難免有不足之處,敬請(qǐng)廣大讀者、專家提出寶貴意見。
內(nèi)容概要
Visual Basic 2005是微軟推出的一種功能強(qiáng)大的開發(fā)語(yǔ)言,它具有類型安全和完全面向?qū)ο蟮奶攸c(diǎn)。Visual Basic可以用于程序開發(fā)的許多領(lǐng)域,如桌面程序、數(shù)據(jù)庫(kù)開發(fā)、網(wǎng)站開發(fā)等,它上手容易、功能強(qiáng)大,越來(lái)越受到廣大程序員和編程愛(ài)好者的青睞?! ”緯卜?4章,系統(tǒng)地介紹了如何使用Visual Basic 2005開發(fā)應(yīng)用程序,具體包括Visual Studio 2005開發(fā)環(huán)境、Visual Basic的語(yǔ)法、面向?qū)ο蟮母拍睢indows窗體的使用、控件的使用、對(duì)話框、文件操作、數(shù)據(jù)庫(kù)開發(fā)、網(wǎng)站開發(fā)、使用ActiveX部件、應(yīng)用程序的調(diào)試和錯(cuò)誤處理以及應(yīng)用程序的安裝和部署等內(nèi)容?! ”緯攸c(diǎn)明確,結(jié)構(gòu)合理,語(yǔ)言簡(jiǎn)明,書中實(shí)例均為作者在本領(lǐng)域工作中的真實(shí)案例,具有很強(qiáng)的實(shí)用性。本書可作為高等學(xué)校計(jì)算機(jī)相關(guān)專業(yè)的教材,也可作為Visual Basic初、中級(jí)用戶的自學(xué)用書。
書籍目錄
第1章 Visual Basic 2005簡(jiǎn)介 1.1 .NET Framework 2.0概述 1.2 Visual Studio 2005開發(fā)環(huán)境 1.3 經(jīng)典實(shí)例Hello 1.4 習(xí)題 第2章 程序設(shè)計(jì)基礎(chǔ) 2.1 數(shù)據(jù)類型和表達(dá)式 2.2 程序結(jié)構(gòu) 2.3 子過(guò)程和函數(shù)過(guò)程 2.4 習(xí)題 第3章 面向?qū)ο蟮某绦蛟O(shè)計(jì) 3.1 面向?qū)ο蟪绦蛟O(shè)計(jì)的基本概念 3.2 類和對(duì)象 3.3 類的高級(jí)主題 3.4 命名空間 3.5 Me關(guān)鍵字 3.6 習(xí)題 第4章 Windows窗體 4.1 初識(shí)Windows窗體 4.2 窗體屬性 4.3 窗體事件 4.4 窗體方法 4.5 多文檔窗體界面 4.6 習(xí)題 第5章 常用控件 第6章 菜單、工具欄和狀態(tài)欄 第7章 鼠標(biāo)和鍵盤事件 第8章 對(duì)話框 第9章 文件操作 第10章 數(shù)據(jù)庫(kù)應(yīng)用程序開發(fā) 第11章 Web應(yīng)用程序開發(fā) 第12章 使用ActiveX部件 第13章 應(yīng)用程序的調(diào)試和錯(cuò)誤處理 第14章 安裝和部署
章節(jié)摘錄
第13章 應(yīng)用程序的調(diào)試和錯(cuò)誤處理 Visual Basic 2005有著非常豐富的調(diào)試工具,讀者必須在不斷的使用中熟練地掌握它們,這對(duì)于編寫和開發(fā)稍大的應(yīng)用程序非常重要。在編寫大型應(yīng)用程序時(shí),會(huì)顯得更加至關(guān)重要。 在發(fā)布應(yīng)用程序給其他用戶之前,測(cè)試應(yīng)用程序并盡可能地改正錯(cuò)誤是非常重要的。本章介紹如何使用Visual Basic.NET的調(diào)試工具,同時(shí)介紹幾個(gè)技巧將使應(yīng)用程序出錯(cuò)的可能性降低到最小,并在出錯(cuò)時(shí)盡快找出它們。這些技巧包括:用詳細(xì)的注釋歸檔代碼,使用調(diào)試工具等?! o(wú)論多么仔細(xì)精巧地制作代碼,都可能(而且很可能)會(huì)出現(xiàn)錯(cuò)誤。例如在運(yùn)行中,可能會(huì)遇到意外而中止程序,或者由于程序的本身缺陷,導(dǎo)致錯(cuò)誤。好的應(yīng)用程序應(yīng)該包含錯(cuò)誤處理代碼,在出現(xiàn)錯(cuò)誤的時(shí)候,能夠?qū)﹀e(cuò)誤進(jìn)行處理,使程序能夠繼續(xù)運(yùn)行或安全地退出,減少錯(cuò)誤帶來(lái)的麻煩。本章在最后將介紹如何在程序中使用錯(cuò)誤處理語(yǔ)句處理錯(cuò)誤。本章結(jié)束的時(shí)候,相信讀者已經(jīng)能夠有效地歸檔、調(diào)試程序代碼,使程序具有很強(qiáng)的生命力?! ”菊轮攸c(diǎn)內(nèi)容: * 歸檔程序代碼 * 熟練使用各種調(diào)試工具 * 使用斷點(diǎn)中斷程序的執(zhí)行 * 結(jié)構(gòu)化錯(cuò)誤處理 13.1 歸檔程序代碼 在深入研究如何使用Visual Basic 2005的調(diào)試工具之前,先看一看預(yù)防性的措施。雖然它的效果不一定能明顯地表現(xiàn)出來(lái),但清晰、簡(jiǎn)明、一致的文檔是良好代碼的基本條件。 技巧: 歸檔代碼時(shí),最重要的是保持一致性。這意味著使用同樣的注釋、命名、代碼布局樣式。如果學(xué)會(huì)采用歸檔代碼的方法來(lái)積極有效地開發(fā)應(yīng)用程序,將縮短花在調(diào)試上的時(shí)間?! ?3.1.1 給程序代碼增加注釋 用注釋作為程序代碼文檔幾乎像程序代碼本身一樣重要,注釋可以用來(lái)標(biāo)識(shí)一行代碼、一個(gè)過(guò)程、一個(gè)代碼模塊甚至整個(gè)程序段。如果已經(jīng)完成了以前的例子,那么就已經(jīng)看到并使用了注釋。最明顯的注釋符是單引號(hào)。只要單引號(hào)被插入到某一行中,單引號(hào)之后的該行中的內(nèi)容都是注釋,并且注釋以不同的顏色顯示出來(lái)(默認(rèn)的顏色為綠色)。 如何使用注釋依賴于讀者的風(fēng)格和習(xí)慣,下面將介紹一些有效的歸檔程序代碼的方法?! ?. 應(yīng)用程序級(jí) 在開發(fā)大的項(xiàng)目時(shí),編程人員被分成若干組去開發(fā)項(xiàng)目的不同部分,每個(gè)小組使用單獨(dú)的生成系統(tǒng)(Build System),這個(gè)生成系統(tǒng)是一個(gè)安裝所有第三方控件并且具有各種Visual Basic版本的中央計(jì)算機(jī)。組件的需求就顯得尤為重要,因?yàn)榘惭b應(yīng)用程序時(shí)常常無(wú)法知道哪些資源是必需的。為了解決這個(gè)問(wèn)題,創(chuàng)建一個(gè)單獨(dú)的模塊。這個(gè)模塊除了具有對(duì)項(xiàng)目的注釋外,不含其他的信息,它使用如下格式: 應(yīng)用程序名稱 版本 版權(quán) 服務(wù)器 客戶端 作者/公司 用途 最低需求 當(dāng)上面的注釋區(qū)被填滿后,注釋應(yīng)該看起來(lái)如下所示: 應(yīng)用程序名稱 Kill Happy Time Virsus 版本 1.0 版權(quán) 2001-免費(fèi)軟件 作者/公司 張三/紅軟科技公司 用途 殺毒軟件 最低需求 CPU:主頻1GB以上,內(nèi)存:512MB以上 客戶端 Windows 9x /NT4.0 服務(wù)器 MS SQL2000 這個(gè)應(yīng)用程序級(jí)的注釋文件包含在應(yīng)用程序中;當(dāng)其他人檢查這個(gè)應(yīng)用程序時(shí),通過(guò)這段描述文件就可以知道要想使用這個(gè)應(yīng)用程序正確地編譯和運(yùn)行需要哪些資源?! ?. 模塊級(jí) 描述每個(gè)模塊的目的比歸檔應(yīng)用程序的特殊細(xì)節(jié)和需要更重要的多,這一點(diǎn)在多個(gè)開發(fā)人員同時(shí)使用一個(gè)包含需要重復(fù)使用的特定函數(shù)時(shí)尤為明顯。 下面是推薦使用的在模塊級(jí)注釋的代碼,它能讓要使用該模塊的其他編程人員很快了解所有必要的信息,縮短開發(fā)時(shí)間,并能開發(fā)出一致的、標(biāo)準(zhǔn)的應(yīng)用程序?! ∥募 ∽髡摺 ∪掌凇 ∶枋觥 ∫蕾噹?kù) 更新 下面是填入注釋的例子: 文件名 MyBrowser 作者 張三 日期 2001-4-25 描述 這是一個(gè)動(dòng)態(tài)鏈接庫(kù),包含了創(chuàng)建瀏覽器所需的方法 依賴庫(kù) 不需要 更新 2001-4-25創(chuàng)建 2001-5-6 添加刷新函數(shù) 技巧: 如果要生成可復(fù)用代碼、類模塊,可以在模塊的全局定義中加入注釋,以說(shuō)明整個(gè)模塊中的過(guò)程、需求以及這個(gè)模塊的獨(dú)立性,保證其他編程人員確切地了解如何在它們的應(yīng)用程序中使用這些代碼。 3. 過(guò)程級(jí) 在用戶定義的或不明顯的過(guò)程及函數(shù)的開頭加入注釋是十分有用的,這些注釋將幫助讀者或其他編程人員確切地理解并記住過(guò)程的功能、用法。例如: 過(guò)程: AddUser() 作者 張三 日期 2001-5-6 描述 這個(gè)函數(shù)的作用是在域中添加一個(gè)全局用戶 需求 為了這個(gè)函數(shù)正常工作,必須首先提供用戶ID和密碼 提示: 在編寫類或標(biāo)準(zhǔn)模塊時(shí),可在模塊的全局定義中加入注釋,用來(lái)說(shuō)明這個(gè)模塊中的屬性、方法和事件以及這個(gè)模塊的獨(dú)立性,保證其他編程人員確切地了解如何在它們的程序中使用這些代碼?! ?. 代碼級(jí) 注釋可以深入到任何一級(jí),可以直接將注釋放到代碼行中。當(dāng)某行代碼十分值得注意時(shí),在這行后面加入注釋是非常重要的。在使用注釋符時(shí),可以根據(jù)自己的習(xí)慣對(duì)注釋符進(jìn)行擴(kuò)展,以代表更多的含義。表13-1是推薦使用的幾種注釋符?! ”?3-1 推薦使用的注釋符 注釋符說(shuō)明 一般的注釋。它可以用在那些不需特別注意的地方 ?? 有問(wèn)題的代碼,編輯代碼的時(shí)候,總有一些地方覺(jué)得需要改進(jìn)或存在問(wèn)題,標(biāo)出來(lái)引起注意,這對(duì)于程序的維護(hù)和調(diào)試是非常有益的 !! 需要引起注意的代碼 最基本的注釋符是單引號(hào)。無(wú)論將這個(gè)符號(hào)放在一行代碼的中間還是字符串的后面,單引號(hào)右面的文本都被注釋掉了。運(yùn)用這一點(diǎn),就可以發(fā)現(xiàn)一些靈活而有用的注釋技巧,就像上面列出的那樣?! ”M管這些技巧是非常有用的,但不是絕對(duì)的??梢詣?chuàng)建自己的注釋符集合,但是,一定注意,集合的內(nèi)容不要太多,否則難于記憶,而且要保持所有應(yīng)用程序一致性,這對(duì)于節(jié)省調(diào)試時(shí)間是絕對(duì)重要的?! ?3.1.2 使用命名規(guī)則 除了在代碼中寫注釋以外,還應(yīng)該使用統(tǒng)一的命名方式,即命名規(guī)則來(lái)為組件命名。命名規(guī)則有助于代碼更可讀、更明了。下面介紹Visual Basic中使用的命名規(guī)則。 命名Visual Basic應(yīng)用程序中的元素時(shí),名稱的首字符必須為字母字符、數(shù)字或下劃線。但是,注意,以下劃線開頭的名稱不符合公共語(yǔ)言規(guī)范(CLS)?! ∫韵陆ㄗh適用于命名: * 名稱中各單詞首字母均為大寫,如FindLastRecord和RedrawMyForm?! ? 函數(shù)名和方法名以動(dòng)詞開始,如InitNameArray和CloseDialog?! ? 類名、結(jié)構(gòu)名、模塊名和屬性名以名詞開始,如EmployeeName或CarAccessory中?! ? 接口名稱以前綴I開始,后面接一個(gè)名詞或名詞詞組(如IComponent),或者接一個(gè)描述接口行為的形容詞(如IPersistable)。不要使用下劃線,不要過(guò)多使用縮寫,因?yàn)榭s寫會(huì)引起混淆。 * 事件處理程序的名稱以一個(gè)描述事件類型的名詞開始,后面接后綴EventHandler,如MouseEventHandler?! ? 事件參數(shù)類的名稱里要加EventArgs后綴?! ? 如果某事件含有“之前”或“之后”的概念,則以現(xiàn)在時(shí)或過(guò)去時(shí)形式使用前綴,如ControlAdd或ControlAdded?! ? 對(duì)于長(zhǎng)項(xiàng)或常用項(xiàng),可使用縮寫使名稱長(zhǎng)度適中。例如,可以使用HTML代替HyperText Markup Language。通常,多于32個(gè)字符的變量名在低分辨率的監(jiān)視器上難以閱讀。同時(shí),應(yīng)確??s寫在整個(gè)應(yīng)用程序中保持一致。在項(xiàng)目中隨意在HTML和HyperText Markup Language之間切換可能會(huì)導(dǎo)致混淆。 * 在內(nèi)部范圍中避免使用與外部范圍中的名稱相同的名稱。如果訪問(wèn)了錯(cuò)誤的變量,則可能會(huì)產(chǎn)生錯(cuò)誤結(jié)果。若變量與同一名稱的關(guān)鍵字沖突,則必須在關(guān)鍵字前加適當(dāng)?shù)念愋蛶?kù)以作標(biāo)識(shí)。例如,如果有一個(gè)名為Date的變量,通過(guò)調(diào)用 System.DateTime.Date只可以使用內(nèi)部 Date 函數(shù)?! ? 常量名最好全部大寫,盡量使用全名,使用下劃線連接不同單詞,如USER_ID?! ? 控件和窗體命名使用前綴?! ?3.1.3 編寫結(jié)構(gòu)化的代碼 除了注釋和命名規(guī)則外,另一個(gè)歸檔代碼的方法是編寫結(jié)構(gòu)化的代碼,即使用制表符和空格使代碼在代碼窗口中以縮進(jìn)形式排列。在Visual Basic 2005中默認(rèn)的制表符是4個(gè)空格,但是可以通過(guò)IDE中的“工具”|“選項(xiàng)”命令,打開“選項(xiàng)”對(duì)話框,選擇“文本編輯器”|Basic|“編輯器”,來(lái)設(shè)置制表符的空格個(gè)數(shù)和縮進(jìn)量,如圖13-1所示。 圖13-1 設(shè)置制表符 Visual Basic 2005的代碼編輯器已經(jīng)具有了自動(dòng)縮進(jìn)功能(可以禁止這些功能),主要是對(duì)于過(guò)程級(jí)代碼和控制語(yǔ)句,如下面的代碼: Public Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Dim a As Integer = 0 If a > 5 Then a = 0 Else a = a + 1 End If End Sub 所有的縮進(jìn)是由程序自動(dòng)完成的,不需要自己手動(dòng)調(diào)節(jié)。讀者所要做的是設(shè)置這些縮進(jìn)量、在控制語(yǔ)句內(nèi)部條件不同層次語(yǔ)句之間的縮進(jìn)量以及添加清晰的注釋。 13.2 Visual Studio 2005調(diào)試器的新增功能 和原來(lái)版本的調(diào)試技術(shù)相比,Visual Studio 2005增加了許多新的功能。下面簡(jiǎn)單介紹一些重要的新增功能?! ? Visual Basic的“編輯并繼續(xù)”功能:可以在調(diào)試應(yīng)用程序時(shí)更改VB代碼,同時(shí)還可以繼續(xù)運(yùn)行應(yīng)用程序。此功能讓我們能夠迅速修復(fù)錯(cuò)誤、測(cè)試新功能和修改現(xiàn)有功能,從而提高工作效率?! ? 遠(yuǎn)程調(diào)試更為安全、設(shè)置更為簡(jiǎn)便:通過(guò)將單個(gè)可執(zhí)行程序復(fù)制到遠(yuǎn)程計(jì)算機(jī)來(lái)設(shè)置遠(yuǎn)程調(diào)試,而無(wú)需使用復(fù)雜的設(shè)置指令或注冊(cè)。遠(yuǎn)程調(diào)試現(xiàn)在更為安全和可靠。此外,現(xiàn)在可以調(diào)試64位的托管應(yīng)用程序和非托管應(yīng)用程序?! ? 增強(qiáng)的調(diào)試器數(shù)據(jù)提示功能:調(diào)試器的“數(shù)據(jù)提示”得到了改進(jìn)??梢栽谠创a編輯器中直接定位復(fù)雜數(shù)據(jù)結(jié)構(gòu)的內(nèi)容,還可以從“數(shù)據(jù)提示”中打開可視化工具,以直觀和自然的格式查看數(shù)據(jù)?! ? “僅我的代碼”調(diào)試:此功能使我們可以將注意力集中在自己編寫的代碼上,而忽略自己不感興趣的代碼?! ? 跟蹤點(diǎn)和改進(jìn)的斷點(diǎn)用戶界面:斷點(diǎn)不再僅用于進(jìn)行中斷。跟蹤點(diǎn)是一種使用斷點(diǎn)執(zhí)行自定義操作的新方法。使用跟蹤點(diǎn),可以輸出消息或運(yùn)行Visual Studio自動(dòng)化宏,決定當(dāng)調(diào)試器命中跟蹤點(diǎn)時(shí)是中斷還是繼續(xù)。用戶界面得到了改進(jìn),使得設(shè)置所有斷點(diǎn)更為輕松快捷?! ? Visual Basic異常助手:新增的“異常助手”對(duì)話框能夠在Visual Basic程序中發(fā)生異常時(shí)提供更好的信息?! 〕松厦嫣岬降墓δ芡猓琕isual Studio 2005還在許多方面進(jìn)行了改進(jìn),這里就不再一一介紹了。如果使用過(guò)早期的Visual Studio軟件,就會(huì)發(fā)現(xiàn)和早期的版本相比,Visual Studio 2005帶來(lái)了更多便利?! ?3.3 調(diào) 試 工 具 .NET Framework SDK包含名為Visual Debugger的工具,我們可以在運(yùn)行應(yīng)用程序時(shí)使用該工具來(lái)調(diào)試代碼。此工具位于%ProgramFiles%\Microsoft Visual Studio 8\SDK\v2.0\GuiDebug\DbgCLR.exe中。在使用該調(diào)試器時(shí),可以通過(guò)在執(zhí)行應(yīng)用程序時(shí)逐句執(zhí)行每條語(yǔ)句,以及通過(guò)查看每個(gè)變量中的數(shù)據(jù)來(lái)準(zhǔn)確了解應(yīng)用程序的工作方式?! ∈褂肰isual Debugger可以在運(yùn)行代碼時(shí)對(duì)代碼進(jìn)行檢查,該程序中包含下列可以幫助調(diào)試應(yīng)用程序的功能: * 斷點(diǎn):斷點(diǎn)是代碼中調(diào)試器將要停止應(yīng)用程序的位置??梢允褂脭帱c(diǎn)查看應(yīng)用程序的當(dāng)前數(shù)據(jù)狀態(tài),然后逐句通過(guò)每一行代碼?! ? 單步執(zhí)行:當(dāng)在斷點(diǎn)處停止后,即可逐行運(yùn)行代碼(稱為單步執(zhí)行代碼)?! ? 數(shù)據(jù)查看:Visual Debugger為在運(yùn)行應(yīng)用程序時(shí)查看和跟蹤數(shù)據(jù)提供了許多不同的選項(xiàng)。調(diào)試器允許開發(fā)人員在以中斷模式停止應(yīng)用程序時(shí)修改數(shù)據(jù),然后使用修改過(guò)的數(shù)據(jù)繼續(xù)運(yùn)行應(yīng)用程序。 注意: Visual Studio?2005的“編輯并繼續(xù)”功能對(duì)于 Web 應(yīng)用程序不可用。 調(diào)試程序時(shí),需要注意權(quán)限的問(wèn)題。調(diào)試進(jìn)程比執(zhí)行該進(jìn)程需要更多的特權(quán)。因此,除了要為調(diào)試配置應(yīng)用程序外,還必須確保有足夠的權(quán)限附加到進(jìn)程,以便調(diào)試該進(jìn)程。用戶有權(quán)調(diào)試在他們自己的用戶本地標(biāo)識(shí)下運(yùn)行的進(jìn)程,但不能調(diào)試其他用戶的進(jìn)程。管理員可以調(diào)試任何進(jìn)程?! ∠旅娼榻B如何使用調(diào)試工具?! ?3.3.1 調(diào)試工具欄 在Debug菜單中有所有的調(diào)試命令和工具,為了提供更方便的快速訪問(wèn)與使用這些命令和工具,Visual Basic 2005提供了調(diào)試工具欄,如圖13-2所示?! D13-2 調(diào)試工具欄 下面按照從左到右的順序介紹這些按鈕?! ? 啟動(dòng)/繼續(xù)按鈕:用來(lái)啟動(dòng)當(dāng)前的工程,進(jìn)入調(diào)試狀態(tài)。除了使用這個(gè)按鈕,還可以使用“調(diào)試”|“啟動(dòng)調(diào)試”命令或者直接按F5鍵?! ≌f(shuō)明: 幾乎所有的調(diào)試工具都有快捷鍵。例如,啟動(dòng)/繼續(xù)是F5鍵,停止調(diào)試是Ctrl+Shift +Break鍵等,記住快捷鍵可以提高調(diào)試的效率,而且有時(shí)候按按鈕不方便時(shí)(如全屏運(yùn)行),只能使用快捷鍵?! ? 全部中斷:調(diào)試器將停止所有在調(diào)試器下運(yùn)行的程序。程序并不退出,可以隨時(shí)恢復(fù)執(zhí)行。調(diào)試器和應(yīng)用程序現(xiàn)在處于中斷模式。 * 停止調(diào)試:如果程序是從Visual Studio啟動(dòng)的,則“停止調(diào)試”終止正調(diào)試的進(jìn)程。如果程序附加到進(jìn)程,而不是從Visual Studio啟動(dòng),則該進(jìn)程仍繼續(xù)運(yùn)行?! ? 逐語(yǔ)句按鈕:使用逐語(yǔ)句按鈕可以每次只執(zhí)行一行代碼。如果該行包含函數(shù)調(diào)用,則僅執(zhí)行調(diào)用本身,然后在函數(shù)內(nèi)的第一個(gè)代碼行處停止。它的快捷鍵是F8?! ? 逐過(guò)程按鈕:每次執(zhí)行一行代碼,如果該行包含函數(shù)調(diào)用,則執(zhí)行整個(gè)函數(shù),然后在函數(shù)外的第一行處停止,快捷鍵是Shift+F8?! ? 跳出按鈕:在函數(shù)內(nèi)部單擊該按鈕,一直執(zhí)行代碼,直到函數(shù)返回,然后在調(diào)用函數(shù)中的返回點(diǎn)處中斷??旖萱I是Ctrl+Shift+F8?! ?3.3.2 使用調(diào)試工具窗口 有時(shí)可以通過(guò)運(yùn)行部分代碼來(lái)查找問(wèn)題產(chǎn)生的原因。但是,經(jīng)常要做的往往還是分析數(shù)據(jù)到底發(fā)生了什么變化??梢栽谟嘘P(guān)變量或?qū)傩缘膯?wèn)題中將不正確的值放到一邊,然后確定變量或?qū)傩允侨绾蔚玫讲徽_的值的,為什么會(huì)得到這些值?! ≡谥鸩竭\(yùn)行應(yīng)用程序的語(yǔ)句時(shí),可用調(diào)試窗口監(jiān)視表達(dá)式和變量的值。常用的調(diào)試窗口有即時(shí)窗口、監(jiān)視窗口、輸出窗口、局部變量窗口、調(diào)用堆棧窗口。下面進(jìn)行介紹?! ?. 即時(shí)窗口 即時(shí)窗口顯示代碼中正在調(diào)試的語(yǔ)句所產(chǎn)生的信息,也可以顯示直接往窗口中輸入的命令所請(qǐng)求的信息。即時(shí)窗口如圖13-3所示?! D13-3 即時(shí)窗口 有時(shí),當(dāng)調(diào)試或試驗(yàn)一個(gè)應(yīng)用程序時(shí),可能要執(zhí)行單個(gè)過(guò)程、對(duì)表達(dá)式求值或者為變量或?qū)傩再x予新的值??捎眉磿r(shí)窗口完成這些任務(wù)??梢酝ㄟ^(guò)在即時(shí)窗口中顯示表達(dá)式來(lái)計(jì)算表達(dá)式的值?! ?duì)于監(jiān)視表達(dá)式,這有多個(gè)優(yōu)點(diǎn):用戶可以得到反饋信息,以獲得關(guān)于應(yīng)用程序執(zhí)行的情況,而不必中斷執(zhí)行。在運(yùn)行應(yīng)用程序時(shí),可看到顯示出的數(shù)據(jù)或其他信息。由于在一個(gè)單獨(dú)的區(qū)域內(nèi)(即時(shí)窗口)顯示反饋,所以反饋不會(huì)影響用戶看到的輸出。又因?yàn)榭梢园堰@個(gè)代碼作為窗體的一部分來(lái)保存,所以下次處理應(yīng)用程序時(shí)不必重新定義這些語(yǔ)句?! ≡诩磿r(shí)窗口計(jì)算表達(dá)式或變量很簡(jiǎn)單,使用問(wèn)號(hào)(?)命令直接把信息顯示到即時(shí)窗口中??稍诹⒓创翱谥杏?jì)算任何有效的表達(dá)式,包括調(diào)用了屬性的表達(dá)式。當(dāng)前活動(dòng)窗體或模塊決定了表達(dá)式的范圍。如果在與窗體或類相關(guān)聯(lián)的代碼內(nèi)中止了執(zhí)行,則可像下面代碼這樣引用那個(gè)窗體(或其控件之一)的屬性: ? Button1.Enabled 2. 監(jiān)視窗口 監(jiān)視窗口是最常使用的代碼調(diào)試窗口,如圖13-4所示。監(jiān)視窗口在運(yùn)行時(shí)監(jiān)視和觀察對(duì)象的變量,可以在監(jiān)視窗口中看到多個(gè)屬性,單擊監(jiān)視窗口的按鈕就可以看到監(jiān)視窗口。監(jiān)視窗口動(dòng)態(tài)地監(jiān)視變量的更新?! D13-4 監(jiān)視窗口 3. 局部變量窗口 局部變量窗口顯示當(dāng)前堆棧的所有變量及其值。局部變量窗口中的值在每次由運(yùn)行模式到中斷模式時(shí)或堆棧內(nèi)容發(fā)生改變時(shí)會(huì)自動(dòng)更新。局部變量窗口不僅顯示變量的值,而且也顯示對(duì)象的情況。局部變量窗口如圖13-5所示?! D13-5 局部變量窗口 4. 輸出窗口 在調(diào)試或運(yùn)行程序時(shí)最先看到的是輸出窗口,它顯示程序的編譯和運(yùn)行情況,如圖13-6所示。除此以外,輸出窗口可以顯示程序中正在調(diào)試的語(yǔ)句所產(chǎn)生的信息,即使用Debug對(duì)象的Write、WriteLine方法時(shí),產(chǎn)生的調(diào)試輸出結(jié)果?! D13-6 輸出窗口 5. 調(diào)用堆棧窗口 調(diào)用堆棧窗口里面顯示了已經(jīng)裝入但沒(méi)有完成的過(guò)程,如圖13-7所示。該圖顯示了Form1窗體的Button1控件的Click事件被裝入,而沒(méi)有運(yùn)行完成。有時(shí)該窗體也顯示其他的一些被裝入而未運(yùn)行的過(guò)程?! D13-7 調(diào)用堆棧窗口 13.4 斷 點(diǎn) 斷點(diǎn)就是程序中定義的一個(gè)位置,在那里程序可被暫時(shí)停止執(zhí)行,控制權(quán)交給調(diào)試器。程序暫停期間,可以檢查和修改不同的程序參數(shù),并可以通過(guò)單步執(zhí)行代碼或從當(dāng)前語(yǔ)句繼續(xù)執(zhí)行等操作來(lái)往下執(zhí)行。一般來(lái)說(shuō),斷點(diǎn)可以告訴調(diào)試器,在斷點(diǎn)之前的所有指令都是正確的,調(diào)試器不需要浪費(fèi)時(shí)間去單步執(zhí)行它們。Visual Basic中可以設(shè)置多種類型的斷點(diǎn),常用的包括位置斷點(diǎn)、條件斷點(diǎn)、命中次數(shù)斷點(diǎn),后面將依次介紹這些斷點(diǎn)。 13.4.1 位置斷點(diǎn) 位置斷點(diǎn)主要是由其位置發(fā)揮作用的,即當(dāng)程序運(yùn)行到設(shè)立斷點(diǎn)的地方時(shí)程序?qū)?huì)停下來(lái)?! ∥恢脭帱c(diǎn)是最簡(jiǎn)單的設(shè)置斷點(diǎn)的方式,只要把光標(biāo)移到要設(shè)斷點(diǎn)的位置,當(dāng)然這一行必須包含一條有效的語(yǔ)句,然后從“調(diào)試”菜單中選擇“切換斷點(diǎn)”命令或按F9鍵或在上下文菜單中選擇“斷點(diǎn)”|“插入斷點(diǎn)”命令,就會(huì)在屏幕上看到在這一行的左邊出現(xiàn)一個(gè)紅色的圓點(diǎn),表示這行設(shè)置了一個(gè)斷點(diǎn),如圖13-8所示。 圖13-8 位置斷點(diǎn) 若要?jiǎng)h除一個(gè)斷點(diǎn),只需把光標(biāo)移到設(shè)置斷點(diǎn)的代碼行處,然后從“調(diào)試”菜單中選擇“切換斷點(diǎn)”命令或按F9鍵,就會(huì)在屏幕上看到在這一行左邊出現(xiàn)的紅色的圓點(diǎn)消失,表示這行的斷點(diǎn)已經(jīng)刪除。 13.4.2 條件斷點(diǎn) 條件斷點(diǎn)是位置斷點(diǎn)的擴(kuò)展方式,當(dāng)程序執(zhí)行到帶標(biāo)記的指令時(shí),如果指定的條件是真,調(diào)試器就會(huì)響應(yīng)條件斷點(diǎn)。在同一指令執(zhí)行數(shù)百次的循環(huán)中,設(shè)置在該循環(huán)中的位置斷點(diǎn)在每次重復(fù)過(guò)程中都會(huì)停止執(zhí)行,這是我們所不希望的。條件斷點(diǎn)僅在某些情況發(fā)生時(shí)中斷指令,例如當(dāng)循環(huán)次數(shù)達(dá)到100時(shí)?! ≡O(shè)置條件斷點(diǎn)的方法為:首先設(shè)置好位置斷點(diǎn),然后在位置斷點(diǎn)上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“條件”命令,彈出如圖13-9所示的對(duì)話框?! D13-9 設(shè)置條件斷點(diǎn) 在“條件”文本框中輸入中斷時(shí)的判斷條件,可以選擇在滿足條件時(shí)中斷,也可以在條件改變時(shí)中斷?! ?3.4.3 命中次數(shù)斷點(diǎn) 默認(rèn)情況下,每次命中斷點(diǎn)時(shí)執(zhí)行都中斷。使用命中次數(shù)斷點(diǎn),可以選擇: * 總是中斷(默認(rèn)設(shè)置)。 * 命中次數(shù)等于指定值時(shí)中斷?! ? 命中次數(shù)等于指定值的倍數(shù)時(shí)中斷?! ? 命中次數(shù)大于或等于指定值時(shí)中斷。 如果要跟蹤斷點(diǎn)的命中次數(shù)但不中斷執(zhí)行,可以將命中次數(shù)設(shè)置為一個(gè)很高的值以便永不命中斷點(diǎn)。需要注意的是,僅為調(diào)試會(huì)話期間保留指定的命中次數(shù)。在調(diào)試會(huì)話結(jié)束時(shí),命中次數(shù)將重置為零?! ≡O(shè)置命中次數(shù)斷點(diǎn)的方法為:首先設(shè)置好位置斷點(diǎn),然后在位置斷點(diǎn)上單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“命中次數(shù)”命令,彈出如圖13-10所示的對(duì)話框?! D13-10 命中次數(shù)斷點(diǎn) 如果不選擇“命中斷點(diǎn)時(shí)總是中斷”,則下拉列表框中會(huì)出現(xiàn)一個(gè)文本框,用于讓用戶輸入斷點(diǎn)命中多少次后中斷?! ∠旅嫱ㄟ^(guò)一個(gè)例子進(jìn)一步了解如何使用斷點(diǎn)。步驟如下: ?。?) 創(chuàng)建一個(gè)名為chap13的解決方案,然后在該解決方案中添加一個(gè)名為DebugTest的項(xiàng)目?! 。?) 在該項(xiàng)目默認(rèn)創(chuàng)建的窗體Form1上添加一個(gè)Button控件。雙擊該控件,創(chuàng)建該控件的Click事件,在該事件中添加如下代碼: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click For i As Integer = 0 To 100 Label1.Text = i.ToString() Next End Sub 這段代碼十分簡(jiǎn)單,執(zhí)行的功能為循環(huán)100次,每次把i的值顯示到Label控件上。我們主要是通過(guò)這段代碼來(lái)演示如何設(shè)置斷點(diǎn)?! 。?) 把光標(biāo)移到Label1.Text = i.ToString()所在的行,按F9鍵,設(shè)置斷點(diǎn),如圖13-11所示?! D13-11 設(shè)置位置斷點(diǎn) ?。?) 在斷點(diǎn)處單擊鼠標(biāo)右鍵,從彈出的快捷菜單中選擇“命令次數(shù)”,在“斷點(diǎn)命中次數(shù)”對(duì)話框的“命中斷點(diǎn)時(shí)下拉列表框中選擇“中斷,條件是命中次數(shù)等于”,然后在下拉列表框右側(cè)的文本框中輸入50,如圖13-12所示?! D13-12 設(shè)置命中次數(shù) (5) 單擊“確定”按鈕關(guān)閉該對(duì)話框,然后按F5鍵開始運(yùn)行程序。單擊Button1按鈕,發(fā)現(xiàn)程序運(yùn)行到i=49時(shí)中斷。因?yàn)閕是從0開始執(zhí)行的,所以i等于49時(shí)正好運(yùn)行了50次。此時(shí)可以使用前面介紹的調(diào)試工具窗口來(lái)查看變量的信息,這里就不再介紹了。讀者可以自己使用調(diào)試工具窗口進(jìn)行查看。 13.5 結(jié)構(gòu)化錯(cuò)誤處理 就理想的情況而言,Visual Basic過(guò)程根本不需要錯(cuò)誤處理代碼。遺憾的是,我們并沒(méi)有生活在一個(gè)理想世界里。有時(shí)文件會(huì)被誤刪除、磁盤驅(qū)動(dòng)器空間會(huì)溢出、網(wǎng)絡(luò)驅(qū)動(dòng)器會(huì)意外地分離。這些可能發(fā)生的事情都能在代碼中引起運(yùn)行時(shí)錯(cuò)誤。為了處理這些錯(cuò)誤,需要將錯(cuò)誤處理代碼添加到過(guò)程中。有時(shí),錯(cuò)誤也可能出現(xiàn)在代碼內(nèi)部,通常稱這類錯(cuò)誤為缺陷。例如,像光標(biāo)不聽指揮之類的小缺陷就足以令人感到沮喪并深感不便。更嚴(yán)重的缺陷可能還會(huì)使應(yīng)用程序不再對(duì)命令做出響應(yīng),這時(shí),可能要重新啟動(dòng)應(yīng)用程序,從而使已經(jīng)完成但尚未存儲(chǔ)的工作丟失。因而在程序中編寫錯(cuò)誤處理代碼是非常重要的?! ?3.5.1 On Error語(yǔ)句 Visual Basic 6中已經(jīng)使用了On Error Goto語(yǔ)句來(lái)捕獲和處理錯(cuò)誤,在Visual Basic 2005中該功能被保留下來(lái)。下面簡(jiǎn)單介紹它的使用,Visual Basic 6的高手可以略過(guò)這段內(nèi)容。使用一個(gè)錯(cuò)誤處理的例子來(lái)說(shuō)明如何使用On Error語(yǔ)句。步驟如下: ?。?) 在該解決方案chap13中添加一個(gè)名為OnErrorTest的項(xiàng)目?! 。?) 修改該項(xiàng)目的默認(rèn)窗體Form1的Text屬性為演示OnError,并在Form1中增加一個(gè)Timer控件,設(shè)置其Enabled屬性為True,創(chuàng)建該控件的Tick事件,并在該事件中增加如下代碼: Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim msg As Integer Dim counter As Integer 如果檢測(cè)到任何一個(gè)錯(cuò)誤,則開始捕獲錯(cuò)誤,并響應(yīng)錯(cuò)誤處理程序 Label1.Text = "我們邂逅了:" & counter.ToString & "秒!" On Error GoTo check counter = Integer.MaxValue counter += 1 Exit Sub 語(yǔ)句標(biāo)號(hào),以下是錯(cuò)誤處理語(yǔ)句 check: Timer1.Stop() 從消息框中選擇重試還是放棄 msg = MsgBox("Error Find ", Microsoft.VisualBasic.MsgBoxStyle.RetryCancel, "Error") 如果選擇重試,返回到出錯(cuò)的行,重新執(zhí)行 If msg = 4 Then Resume 如果放棄則退出應(yīng)用程序 Else End End If End Sub 執(zhí)行該程序,程序開始執(zhí)行后,很快彈出錯(cuò)誤對(duì)話框,如圖13-13所示。 如果單擊“重試”按鈕,則繼續(xù)彈出該對(duì)話框。如果單擊“取消”按鈕,則關(guān)閉該程序?! ‖F(xiàn)在簡(jiǎn)單解釋一下錯(cuò)誤處理語(yǔ)句?! ? On Error語(yǔ)句:用來(lái)捕獲程序中的錯(cuò)誤?! ? Goto語(yǔ)句:跳轉(zhuǎn)語(yǔ)句,一般用來(lái)調(diào)轉(zhuǎn)到錯(cuò)誤處理程序段?! ? Resume語(yǔ)句:重新啟動(dòng),當(dāng)錯(cuò)誤處理完成后,重新回到出錯(cuò)的語(yǔ)句,繼續(xù)向下執(zhí)行?! ∩厦娲a中,定時(shí)器啟動(dòng)時(shí)每隔0.1秒執(zhí)行Tick事件,因?yàn)榘裞ounter賦為最大整數(shù),然后再對(duì)counter加1會(huì)產(chǎn)生溢出錯(cuò)誤。因此會(huì)進(jìn)入On Error語(yǔ)句中,程序執(zhí)行直接跳轉(zhuǎn)到check處。在check處,程序首先彈出“錯(cuò)誤”對(duì)話框,如果單擊“重試”按鈕,則程序繼續(xù)從發(fā)生錯(cuò)誤處執(zhí)行,因?yàn)樵撳e(cuò)誤還存在,所以會(huì)繼續(xù)彈出“錯(cuò)誤”對(duì)話框。如果單擊“取消”按鈕,則End語(yǔ)句被調(diào)用,該程序自動(dòng)退出?! ?3.5.2 使用Try…Catch…Finally…End Try塊 使用On Error錯(cuò)誤處理代碼的最大缺點(diǎn)是不靈活,不穩(wěn)定,不符合結(jié)構(gòu)化的程序設(shè)計(jì)(有Goto語(yǔ)句)。在Visual Basic 2005中增加了新的結(jié)構(gòu)化錯(cuò)誤處理語(yǔ)句,來(lái)代替這些錯(cuò)誤處理語(yǔ)句,它們是Try…Catch…Finally…End Try。通過(guò)這些語(yǔ)句可以集中處理錯(cuò)誤。下面介紹它的使用?! ry…Catch…Finally…End Try語(yǔ)句的語(yǔ)法如下: Try statements Catch statements Catch statements … Finally statements End Try 將可能出錯(cuò)的語(yǔ)句放在Try后面,由Try語(yǔ)句創(chuàng)建錯(cuò)誤句柄;由Catch語(yǔ)句獲得錯(cuò)誤,并執(zhí)行Catch后面的錯(cuò)誤處理語(yǔ)句,進(jìn)行錯(cuò)誤處理。程序中可以有多個(gè)Catch語(yǔ)句,如果第一個(gè)Catch捕獲不到,將由后面的Catch繼續(xù)捕獲錯(cuò)誤。無(wú)論有無(wú)錯(cuò)誤,程序都將執(zhí)行Finally后面的語(yǔ)句?! ∠旅媾e一個(gè)簡(jiǎn)單的例子說(shuō)明如何在程序中使用該結(jié)構(gòu)捕獲和處理錯(cuò)誤。這段程序的作用是當(dāng)單擊Button1按鈕時(shí),在TextBox中顯示x整除y的結(jié)果。程序中加入了錯(cuò)誤處理語(yǔ)句,步驟如下: ?。?) 在解決方案chap13中增加一個(gè)名為TryCatchTest的項(xiàng)目?! 。?) 在該項(xiàng)目的默認(rèn)窗體Form1中添加一個(gè)Button控件、三個(gè)Label控件、三個(gè)TextBox控件,按照?qǐng)D13-14所示設(shè)置控件的Text屬性和位置。 ?。?) 雙擊“計(jì)算”按鈕,創(chuàng)建該控件的Click事件。在該事件中添加如下代碼: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim x As Integer x = Integer.Parse(TextBox1.Text) Dim y As Integer y = Integer.Parse(TextBox2.Text) 創(chuàng)建結(jié)構(gòu)化的錯(cuò)誤句柄 Try 除出錯(cuò) x = x \ y TextBox3.Text = x.ToString 捕獲錯(cuò)誤 Catch err As Exception 錯(cuò)誤處理,將錯(cuò)誤轉(zhuǎn)化為字符串顯示 MsgBox(err.ToString) If y = 0 Then y = 1 跳出錯(cuò)誤處理過(guò)程 Finally Beep() End Try End Sub (4) 運(yùn)行該程序,被除數(shù)輸入1,除數(shù)輸入0,單擊“計(jì)算”按鈕,彈出如圖13-15所示的對(duì)話框?! D13-15 捕獲異常 程序中有一個(gè)漏洞:沒(méi)有注意y是否未零。如果y為零,除零必然會(huì)產(chǎn)生錯(cuò)誤,因而程序中將Try語(yǔ)句放在“x=x\y”語(yǔ)句之前,進(jìn)行捕獲錯(cuò)誤。當(dāng)發(fā)生錯(cuò)誤時(shí),由Catch捕捉,并將錯(cuò)誤原因用消息框顯示出來(lái),然后跳出錯(cuò)誤處理程序?! ″e(cuò)誤對(duì)象詳細(xì)地指明了錯(cuò)誤的原因、出錯(cuò)的位置,當(dāng)開發(fā)人員看到捕獲的錯(cuò)誤時(shí),將很快地根據(jù)錯(cuò)誤提示改正程序中的錯(cuò)誤。 使用Try...Catch...Finally...End Try結(jié)構(gòu)可以方便地捕獲和處理錯(cuò)誤,大大增加了程序的可靠性和應(yīng)變能力。如果希望在調(diào)試運(yùn)行過(guò)程中將程序中捕獲的錯(cuò)誤顯示在即時(shí)窗口中,可以使用Visual Basic 2005的Debug對(duì)象的Write和WriteLine方法來(lái)實(shí)現(xiàn)。Debug.WriteLine將一行文字輸出到即時(shí)窗口;Debug.Write 方法將文字輸出到即時(shí)窗口,并且沒(méi)有換行符?! ⑸蟼€(gè)例子中的MsgBox(…)語(yǔ)句替換為: Debug.Write(err.ToString) 這時(shí)按F5鍵運(yùn)行,可以在即時(shí)窗口看到捕獲的錯(cuò)誤以及原因,如圖13-16所示。 圖13-16 即時(shí)窗口錯(cuò)誤信息 使用Debug對(duì)象可以方便調(diào)試,但在正式發(fā)布的工程中一定要去掉所有Debug語(yǔ)句和前面的MsgBox消息框,而應(yīng)該使應(yīng)用程序根據(jù)可能的錯(cuò)誤進(jìn)行處理,使程序可以繼續(xù)運(yùn)行或者能夠安全退出,使用戶的損失最小。 13.6 習(xí) 題 13.6.1 填空題 1. 調(diào)試程序時(shí),需要注意權(quán)限的問(wèn)題?! ”葓?zhí)行該進(jìn)程需要更多的特權(quán)。因此,除了要為調(diào)試配置應(yīng)用程序外,還必須確保有足夠的 附加到進(jìn)程,以便調(diào)試該進(jìn)程?! ?. 在逐步運(yùn)行應(yīng)用程序的語(yǔ)句時(shí),可用調(diào)試窗口監(jiān)視表達(dá)式和變量的值。常用的調(diào)試窗口有 、 、 、 、 。 3. 在即時(shí)窗口計(jì)算表達(dá)式或變量很簡(jiǎn)單,使用 命令直接把信息顯示到即時(shí)窗口中。 4. 斷點(diǎn)就是程序中定義的一個(gè)位置,在那里程序可被暫時(shí)停止執(zhí)行,控制權(quán)交給 。程序暫停期間,可以檢查和修改不同的 ,并可以通過(guò) 代碼或從當(dāng)前語(yǔ)句 等操作來(lái)往下執(zhí)行?! ?. 如果希望在調(diào)試運(yùn)行過(guò)程中將程序中捕獲的錯(cuò)誤顯示在即時(shí)窗口中,可以使用Visual Basic 2005的Debug對(duì)象的 和 方法來(lái)實(shí)現(xiàn)?! ?3.6.2 選擇題 1. 使用異常時(shí),將可能出錯(cuò)的語(yǔ)句放在 后面,由 語(yǔ)句創(chuàng)建錯(cuò)誤句柄;由 語(yǔ)句獲得錯(cuò)誤,并執(zhí)行 后面的錯(cuò)誤處理語(yǔ)句,進(jìn)行錯(cuò)誤處理。無(wú)論有無(wú)錯(cuò)誤,程序都將執(zhí)行 后面的語(yǔ)句?! . Try B. Catch C. Finally D. On Error 2. 窗口顯示當(dāng)前堆棧的所有變量及其值?! 〈翱谥兄翟诿看斡蛇\(yùn)行模式到中斷模式時(shí)或堆棧內(nèi)容發(fā)生改變時(shí)會(huì)自動(dòng)更新?! . 局部變量 B. 即時(shí) C. 監(jiān)視 D. 調(diào)用堆?! ?. 在調(diào)試或運(yùn)行程序時(shí)最先看到的是 窗口,它顯示程序的編譯和運(yùn)行情況。除此以外, 窗口可以顯示程序中正在調(diào)試的語(yǔ)句所產(chǎn)生的信息。 A. 局部變量 B. 即時(shí) C. 監(jiān)視 D. 輸出 4. 斷點(diǎn)是 斷點(diǎn)的擴(kuò)展方式,當(dāng)程序執(zhí)行到帶標(biāo)記的指令時(shí),如果指定的條件是真,調(diào)試器就會(huì)響應(yīng) 斷點(diǎn)?! . 條件 B. 命中次數(shù) C. 輸出 D. 位置 5. Visual Basic中可以設(shè)置多種類型的斷點(diǎn),常用的包括 斷點(diǎn)、 斷點(diǎn)、 斷點(diǎn)?! . 條件 B. 命中次數(shù) C. 輸出 D. 位置 13.6.3 問(wèn)答題 1. 簡(jiǎn)述如何使用即時(shí)窗口調(diào)試程序?! ?. 簡(jiǎn)述如何使用斷點(diǎn)調(diào)試程序。 3. 簡(jiǎn)述On Error語(yǔ)句和Try…Catch…Finally…End Try塊的區(qū)別?! ?3.6.4 上機(jī)操作題 1. 使用Try…Catch…Finally…End Try塊改寫OnErrorTest項(xiàng)目,彈出的異常如圖13-17所示?! D13-17 錯(cuò)誤對(duì)話框 2. 修改DebugTest項(xiàng)目,使用條件斷點(diǎn),使得當(dāng)i等于50時(shí)中斷程序?! ? 314 ? Visual Basic 2005程序設(shè)計(jì)教程 ? 313 ? 第13章 應(yīng)用程序的調(diào)試和錯(cuò)誤處理 書摘插圖 第1章 Visual Basic 2005簡(jiǎn)介 Microsoft Visual Basic 2005是從Visual Basic語(yǔ)言演變而來(lái),它是一種類型安全和面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言。Visual Basic允許開發(fā)人員開發(fā)面向Windows、Web和移動(dòng)設(shè)備的程序。與所有面向Microsoft.NET Framework的語(yǔ)言一樣,使用Visual Basic編寫的程序都具有安全性和語(yǔ)言互操作性方面的優(yōu)點(diǎn)?! ”菊轮攸c(diǎn)內(nèi)容: .NET Framework的基本概念 Visual Studi0 2005開發(fā)環(huán)境 程序開發(fā)的基本流程 1.1.NET Framework 2.0概述 .NET Framework是一種Windows內(nèi)部組件,它支持生成和運(yùn)行下一代應(yīng)用程序,同時(shí)也支持XML Web Services。.NET Framework具有兩個(gè)主要組件:公共語(yǔ)言運(yùn)行庫(kù)和.NETFramework類庫(kù)。 公共語(yǔ)言運(yùn)行庫(kù)是.NET Framework的基礎(chǔ)。可以將運(yùn)行庫(kù)看作一個(gè)在執(zhí)行時(shí)管理代碼的代理,它提供內(nèi)存管理、線程管理和遠(yuǎn)程處理等核心服務(wù),并且還強(qiáng)制實(shí)施嚴(yán)格的類型安全。事實(shí)上,代碼管理的概念是運(yùn)行庫(kù)的基本原則。以運(yùn)行庫(kù)為目標(biāo)的代碼稱為托管代碼,而不以運(yùn)行庫(kù)為目標(biāo)的代碼稱為非托管代碼。
編輯推薦
本書系統(tǒng)地介紹了使用Visual Basic 2005開發(fā)應(yīng)用程序的方法和技巧,具體內(nèi)容包括Visual Studio 2005開發(fā)環(huán)境、Visual Basic語(yǔ)法、面向?qū)ο蟮母拍?、Windows窗體和控件的使用、對(duì)話框和文件操作、數(shù)據(jù)庫(kù)開發(fā)、網(wǎng)站開發(fā)、使用Active×部件、應(yīng)用程序的調(diào)試和錯(cuò)誤處理以及應(yīng)用程序的安裝和部署等內(nèi)容?! ∽x者對(duì)象 本書可作為高等學(xué)校計(jì)算機(jī)相關(guān)專業(yè)的教材,也可作為Visual Basic初、中級(jí)用戶的參考書?! ”緯厣 ♂槍?duì)高校學(xué)生和初、中級(jí)用戶,基礎(chǔ)知識(shí)與實(shí)踐相結(jié)合,詳細(xì)介紹Visual Basic 2005程序設(shè)計(jì)相關(guān)知識(shí)?! ?nèi)容全面,實(shí)例豐富,可操作性強(qiáng),切實(shí)提高讀者的實(shí)際編程能力。 對(duì)編程實(shí)例中的重點(diǎn)步驟給予特別說(shuō)明,仔細(xì)剖析技術(shù)要點(diǎn),加深讀者印象。 章前給出重點(diǎn)內(nèi)容,章后附有針對(duì)性的練習(xí),使讀者加深對(duì)知識(shí)點(diǎn)的理解和掌握,并能舉一反三。
圖書封面
評(píng)論、評(píng)分、閱讀與下載
Visual Basic 2005程序設(shè)計(jì)教程 PDF格式下載