乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      關(guān)于vb中捕獲錯(cuò)誤語句的使用

       jztgwq 2011-04-12
      啟動(dòng)一個(gè)錯(cuò)誤處理程序并指定該子程序在一個(gè)過程中的位置;也可用來禁止一個(gè)錯(cuò)誤處理程序。

      語法

      On   Error   GoTo   line  
      On   Error   Resume   Next
      On   Error   GoTo   0

      On   Error   語句的語法可以具有以下任何一種形式:

      語句 描述
      On   Error   GoTo   line   啟動(dòng)錯(cuò)誤處理程序,且該例程從必要的   line   參數(shù)中指定的   line   開始。line   參數(shù)可以是任何行標(biāo)簽或行號(hào)。如果發(fā)生一個(gè)運(yùn)行時(shí)錯(cuò)誤,則控件會(huì)跳到   line,激活錯(cuò)誤處理程序。指定的   line   必須在一個(gè)過程中,這個(gè)過程與   On   Error   語句相同;   否則會(huì)發(fā)生編譯時(shí)間錯(cuò)誤。
      On   Error   Resume   Next 說明當(dāng)一個(gè)運(yùn)行時(shí)錯(cuò)誤發(fā)生時(shí),控件轉(zhuǎn)到緊接著發(fā)生錯(cuò)誤的語句之后的語句,并在此繼續(xù)運(yùn)行。訪問對(duì)象時(shí)要使用這種形式而不使用   On   Error   GoTo。
      On   Error   GoTo   0 禁止當(dāng)前過程中任何已啟動(dòng)的錯(cuò)誤處理程序。
      說明

      如果不使用   On   Error   語句,則任何運(yùn)行時(shí)錯(cuò)誤都是致命的;也就是說,結(jié)果會(huì)導(dǎo)致顯示錯(cuò)誤信息并中止運(yùn)行。
      一個(gè)“允許的”錯(cuò)誤處理程序是由   On   Error   語句打開的一個(gè)處理程序;一個(gè)“活動(dòng)的”錯(cuò)誤處理程序是處理錯(cuò)誤的過程中允許的錯(cuò)誤處理程序。如果在錯(cuò)誤處理程序處于活動(dòng)狀態(tài)時(shí)(在發(fā)生錯(cuò)誤和執(zhí)行   Resume、Exit   Sub、Exit   Function   或   Exit   Property   語句之間這段時(shí)間)又發(fā)生錯(cuò)誤,則當(dāng)前過程的錯(cuò)誤處理程序?qū)o法處理這個(gè)錯(cuò)誤??丶祷卣{(diào)用的過程。如果調(diào)用過程有一個(gè)已啟動(dòng)的錯(cuò)誤處理程序,則激活錯(cuò)誤處理程序來處理該錯(cuò)誤。如果調(diào)用過程的錯(cuò)誤處理程序也是活動(dòng)的,則控件將再往回傳到前面的調(diào)用過程,這樣一直進(jìn)行下去,直到找到一個(gè)被允許的但不是活動(dòng)的錯(cuò)誤處理程序?yàn)橹?。如果沒有找到被允許而且不活動(dòng)的錯(cuò)誤處理程序,那么在錯(cuò)誤實(shí)際發(fā)生的地方,錯(cuò)誤本身是嚴(yán)重的。錯(cuò)誤處理程序每次將控件返回調(diào)用過程時(shí),該過程就成為當(dāng)前過程。在任何過程中,一旦錯(cuò)誤處理程序處理了錯(cuò)誤,在當(dāng)前過程中就會(huì)從   Resume   語句指定的位置恢復(fù)運(yùn)行。

      注意       一個(gè)錯(cuò)誤處理程序不是   Sub   過程或   Function   過程。它是一段用行標(biāo)簽或行號(hào)標(biāo)記的代碼。

      錯(cuò)誤處理程序依靠   Err   對(duì)象的   Number   屬性中的值來確定錯(cuò)誤發(fā)生的原因。在其它任何錯(cuò)誤發(fā)生之前,或在調(diào)用一個(gè)可能會(huì)導(dǎo)致錯(cuò)誤發(fā)生的過程之前,錯(cuò)誤處理程序應(yīng)該先測(cè)試或存儲(chǔ)   Err   對(duì)象中相關(guān)的屬性值。Err   對(duì)象中的屬性值只反映最近發(fā)生的錯(cuò)誤。Err.Description   中包含有與   Err.Number   相關(guān)聯(lián)的錯(cuò)誤信息。
      On   Error   Resume   Next   會(huì)使程序從緊隨產(chǎn)生錯(cuò)誤的語句之后的語句繼續(xù)執(zhí)行,或是從緊隨最近一次調(diào)用含有   On   Error   Resume   Next   語句的過程的語句繼續(xù)運(yùn)行。這個(gè)語句可以置運(yùn)行時(shí)錯(cuò)誤于不顧,使程序得以繼續(xù)執(zhí)行??梢詫㈠e(cuò)誤處理程序放置在錯(cuò)誤發(fā)生的地方,而不必將控件傳輸?shù)竭^程中的其它位置。在調(diào)用另一個(gè)過程時(shí),On   Error   Resume   Next   語句成為非活動(dòng)的,所以,如果希望在例程中進(jìn)行嵌入錯(cuò)誤處理,則應(yīng)在每一個(gè)調(diào)用的例程中執(zhí)行   On   Error   Resume   Next   語句。

      注意       當(dāng)處理在訪問其它對(duì)象期間產(chǎn)生的錯(cuò)誤時(shí),與其使用   On   Error   GoTo   指令,不如使用   On   Error   Resume   Next。每次和對(duì)象打交道,在不知道用代碼訪問哪個(gè)對(duì)象時(shí),檢查一下   Err   都會(huì)打消這種疑慮??梢源_定是哪個(gè)對(duì)象產(chǎn)生錯(cuò)誤(Err.Source   中指定的對(duì)象),也可以確定是哪個(gè)對(duì)象將錯(cuò)誤代碼放在   Err.Number  
      中。

      On   Error   GoTo   0   停止在當(dāng)前過程中處理錯(cuò)誤。即使過程中包含編號(hào)為   0   的行,它也不把行   0   指定為處理錯(cuò)誤的代碼的起點(diǎn)。如果沒有   On   Error   GoTo   0   語句,在退出過程時(shí),錯(cuò)誤處理程序會(huì)自動(dòng)關(guān)閉。
      在錯(cuò)誤未發(fā)生的時(shí)候,為了防止錯(cuò)誤處理程序代碼運(yùn)行,請(qǐng)像在下段程序中那樣,在緊靠著錯(cuò)誤處理程序的前面寫入   Exit   Sub、Exit   Function   或   Exit   Property   語句。

      Sub   InitializeMatrix(Var1,   Var2,   Var3,   Var4)
      On   Error   GoTo   ErrorHandler
      .   .   .
      Exit   Sub
      ErrorHandler:
      .   .   .
      Resume   Next
      End   Sub

      此處,錯(cuò)誤處理程序代碼在   Exit   Sub   語句之后,而在   End   Sub   語句之前,從而與過程中的流程分開。錯(cuò)誤處理程序代碼可以在程序中的任何地方寫入。

      當(dāng)對(duì)象作為文件運(yùn)行時(shí),對(duì)象中未捕獲的錯(cuò)誤都被返回控制應(yīng)用程序。在開發(fā)環(huán)境中,如果設(shè)置了正確選項(xiàng),未捕獲的錯(cuò)誤只返回控制應(yīng)用程序。請(qǐng)參考主應(yīng)用程序的文檔的有關(guān)描述,從而得知,在調(diào)試時(shí)應(yīng)該設(shè)置哪些選項(xiàng)、如何設(shè)置這些選項(xiàng)以及主機(jī)能否建立類。

      如果建立一個(gè)訪問其它對(duì)象的對(duì)象,則應(yīng)該著手處理從那些對(duì)象返回的未處理錯(cuò)誤。如果無法處理這種錯(cuò)誤,請(qǐng)將   Err.Number   中的錯(cuò)誤代碼當(dāng)作自己的一個(gè)錯(cuò)誤,然后將錯(cuò)誤回傳給對(duì)象的調(diào)用者。應(yīng)該將錯(cuò)誤代碼添加到   vbObjectError   常數(shù)上來指定這個(gè)錯(cuò)誤。舉例來說,如果錯(cuò)誤代碼為   1052,則使用如下方法指定錯(cuò)誤:

      Err.Number   =   vbObjectError   +   1052

      注意       調(diào)用動(dòng)態(tài)鏈接庫   (DLL)   期間產(chǎn)生的系統(tǒng)錯(cuò)誤不會(huì)產(chǎn)生例外情況,也不會(huì)被   Visual   Basic   的錯(cuò)誤捕獲操作所捕獲。當(dāng)調(diào)用   DLL   函數(shù)時(shí),應(yīng)該(根據(jù)   API   的詳細(xì)說明)檢查每一個(gè)返回值以確定是成功還是失敗,如果失敗,則檢查   Err   對(duì)象的   LastDLLError   屬性中的值。
       

       

      本示例先使用   On   Error   GoTo   語句在一個(gè)過程中指定錯(cuò)誤處理的代碼所在。本示例中,試圖刪除一已經(jīng)打開的文件從而生成的錯(cuò)誤碼為   55。這個(gè)錯(cuò)誤將由示例中的錯(cuò)誤處理程序碼來處理,處理完後,控制會(huì)回到發(fā)生錯(cuò)誤的語句處。On   Error   GoTo   0   語句關(guān)閉錯(cuò)誤陷阱。然后   On   Error   Resume   Next   語句用來改變錯(cuò)誤陷阱,以便發(fā)覺下一個(gè)語句產(chǎn)生的錯(cuò)誤的范圍。請(qǐng)注意示例中使用   Err.Clear   在錯(cuò)誤處理完後,清除   Err   對(duì)象的屬性。

      Sub   OnErrorStatementDemo()
      On   Error   GoTo   ErrorHandler '   打開錯(cuò)誤處理程序。
      Open   "TESTFILE "   For   Output   As   #1 '   打開輸出文件。
      Kill   "TESTFILE " '   試圖刪除已打開的文件。
      On   Error   Goto   0 '   關(guān)閉錯(cuò)誤陷阱。
      On   Error   Resume   Next '   改變錯(cuò)誤陷阱。
      ObjectRef   =   GetObject( "MyWord.Basic ") '   試圖啟動(dòng)不存在
      '   的對(duì)象
      '檢查可能發(fā)生的   Automation   錯(cuò)誤。
      If   Err.Number   =   440   Or   Err.Number   =   432   Then

      '   告訴用戶出了什么事。然后清除   Err   對(duì)象。
      Msg   =   "There   was   an   error   attempting   to   open   the   OLE   object! "
      MsgBox   Msg,   ,   "Deferred   Error   Test "
      Err.Clear '   清除   Err   對(duì)象字段。
      End   If
      Exit   Sub '   退出程序,以避免進(jìn)入錯(cuò)誤處理程序。
      ErrorHandler: '   錯(cuò)誤處理程序。
      Select   Case   Err.Number '   檢查錯(cuò)誤代號(hào)。
      Case   55 '   發(fā)生“文件已打開”的錯(cuò)誤。
      Close   #1 '   關(guān)閉已打開的文件。

      Case   Else
      '   處理其他錯(cuò)誤狀態(tài)   .   .   .  
      End   Select
      Resume '   將控制返回到產(chǎn)生錯(cuò)誤的語句。
      End   Sub

      i

      Visual   Basic   6之中的錯(cuò)誤處理機(jī)制對(duì)實(shí)現(xiàn)一流的代碼編制并不是很有利。在大多數(shù)的VB應(yīng)用程序之中典型的錯(cuò)誤處理類似于這樣:      


      Public   Sub   DoSomething()
      Dim   objSomeObject   As   Object

      On   Error   GoTo   ErrorHandler

      注釋:Do   something

      Set   objSomeObject   =   Nothing

      Exit   Sub

      ErrorHandler:
      Set   objSomeObject   =   Nothing

      注釋:Handle   Error
      Call   Msgbox( "Error   Number:   "   &
      Err.Number)
      End   Sub  
      這種方法的問題在于,任何清除的代碼都必須被復(fù)制,包括在主執(zhí)行路徑和錯(cuò)誤處理器之中的。這種方法的另一個(gè)問題是程序有多個(gè)退出點(diǎn)。

      這里是處理錯(cuò)誤的一個(gè)簡(jiǎn)潔的方法:

      Public   Sub   DoSomething()
      Dim   objSomeObject   As   Object

      On   Error   GoTo   Cleanup

      注釋:Do   something

      Cleanup:
      Set   objSomeObject   =   Nothing

      注釋:Handle   Error
      If   Err.Number   <>   0   Then
      Call   Msgbox( "Error   Number: "   &   Err.Number)
      End   If
      End   Sub  
      通過讓代碼進(jìn)入清除段,清除就會(huì)只出現(xiàn)一次。在執(zhí)行了清除之后,代碼就會(huì)進(jìn)行檢查,看是否有錯(cuò)誤出現(xiàn)并適當(dāng)?shù)貙?duì)其進(jìn)行處理。

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(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)論公約

        類似文章 更多