發新話題

Visual Basic 進階操作

Visual Basic 進階操作

[glow=570,#8B008B,6]Visual Basic 進階操作[/glow]

★功能表編輯器

★ToolBar 控制項

★指定色彩的方法

★錯誤偵測與處理


程式錯誤的類型

⊙語法錯誤
程式編寫過程中,Visual Basic會自動進行程式語法的校對工作,當每一行程式敘述完成時,亦即游標在編輯視窗中移開該行時,若有語法上的錯誤,立即顯示錯誤訊息,以提醒程式設計者進行更正。

⊙編譯錯誤
在Visual Basic編輯環境下,當開始執行程式時,即進行程式碼編譯工作,若有編譯上不能執行的問題出現,將立即顯示編譯錯誤訊息。

⊙邏輯錯誤
邏輯錯誤係指程式撰寫錯誤,有可能造成程式產生錯誤結果或停止執行。例如,不正確的變數名稱、不正確的變數型態、無窮迴圈、比對中發生瑕疵或陣列問題等均可能發生邏輯錯誤。

⊙執行階段錯誤
發生了一個錯誤,Visual Basic 中沒有可以與之相對應的錯誤。

TOP

[glow=570,#8B008B,6]功能表編輯器[/glow]


讓您可以為應用程式建立自訂的功能表,並定義其屬性。

對話方塊選項
標題
讓您可以對所建立的功能表列或在功能表中,輸入其功能表或指令的名稱。

若您希望在功能表中建立分隔列,可在標題方塊中輸入單一的連接符號 (-)。

若您要設定使用者鍵盤以對應功能表項目,可在字母前插入 and 記號 (&)。在執行階段,字母會出現底線 (但看不到 & 符號),使用者只要按下 ALT 鍵和這個字母就可以存取功能表或指令。若您希望在功能表中顯示 & 符號,可放入兩個連續的 & 符號在標題中。

名稱
讓您對功能表項目輸入控制項的名稱。控制項名稱只是在程式碼中用來存取功能表項目的識別符號,並不會出現在功能表中。

索引
讓您指定一個數值以決定控制項在控制項陣列中的位置。然而這個位置與螢幕的位置無關。

快速鍵
讓您可以為每個指令選取一個快速鍵。

說明主題代碼
讓您可以對內容識別號指定唯一的數值。透過 HelpFile 屬性的識別,便可用這個值在「說明」檔案中來尋找適當的說明主題。

協調位置
讓您選取功能表的「協調位置」屬性。這個屬性用來決定功能表如何顯示於收納器表單中及其可能性。

可核取
可讓您在功能表項目的左邊加入核取的記號。通常用它來指出切換選項的開關狀態。

啟用
可讓您選擇是否讓功能表項目回應事件,或者您希望這個項目失去作用並模糊顯示,也可以利用此功能來清除事件。

可看見
可讓您的功能表項目出現在功能表上。

具視窗清單
可決定在 MDI 應用程式中,功能表控制項是否包含開啟的 MDI 子表單清單。


右箭號
可移動已選取的功能表,每按一下滑鼠便開啟下一層的功能表。您可以建立多達四層的子功能表。


左箭號
可移動已選取的功能表,每按一下滑鼠便開啟上一層的功能表。您可以建立多達四層的子功能表。


上箭號
在相同的功能表中,每按一下滑鼠便可移動已選取的功能表項目向上移動一個位置。


下箭號
在相同的功能表中,每按一下滑鼠便可移動已選取的功能表項目向下移動一個位置。

功能清單
顯示功能表項目的層級組織清單方塊。而子功能表項目會以縮排狀態,指出它們的層級位置或等級。

下一行
移動選項到下一行。

插入
在清單方塊中的目前選取行上插入一行。

刪除
刪除目前指定行。

確定
關閉功能表編輯器,並回應所有的修改到您選取的最後一個表單。功能表可使用於設計階段,然而是在設計階段選取功能表,透過對其功能表的 Click 事件來開啟「程式碼」視窗,而非執行任何的事件程式碼。

取消
關閉功能表編輯器,並取消所有修改。

TOP

[glow=570,#8B008B,6]ToolBar 控制項[/glow]

只要將 ToolBar(工具列)元件加入,要設計有工具列的表單並不難。

要領:在表單中設計工具列,必須先設置一個影像列示盒(ImageList),將工具列中各個圖示的圖片檔先指定存入影像列示盒,再於工具列的屬性中指定引用該影像列示盒,並逐一指定圖示。

範例程式訪客無法瀏覽此圖片或連結,請先 註冊登入會員

解說
在功能表「專案(P)」點選「設定使用元件(O)...」


點選「Microsoft Windows Common Controls 6.0 (SP6)」


工具箱顯示新增控制項 共九項,工具列要用到 Toolbar 及 ImageList 兩項。


點選工具箱控制項 "Toolbar"


在表單中增設 ToolBar 控制項


無論指定區域為何處,ToolBar 控制項一定崁在表單上端;接著,點選工具箱控制項 "ImageList "


在表單中增設 ImageList 控制項(設定位置只要在表單內即可,執行階段不會顯現)


游標移至新增的 ImageList,按滑鼠右鍵,點選「屬性(R)」


在顯示的「屬性頁」之「一般」頁籤中,點選圖示大小。(此例選取 "16 x 16")


在「影像」頁籤中,按下「插入圖片(P)...」按鈕


選擇圖片檔


再按下「插入圖片(P)...」按鈕,選擇第二個圖片檔


全部圖片選取完畢後,按下「確定」按鈕。


游標移至表單的 Toolbar,按滑鼠右鍵,點選「屬性(R)」


在顯示的「屬性頁」之「一般」頁籤中,指定方才設定圖片檔的 ImageList 之名稱。


在「屬性頁」之「按鈕」頁籤中,按下「插入按鈕(N)」。


搭配 ImageList1 的第一個圖片,在「索引」為"1"的「工具提示」填上 "開新檔案",「影像」填上 "1",再按下「套用(A)」按鈕。


可發現第一個圖片出現在工具列。


若在「標題」填上文字,再按下「套用(A)」按鈕。


可發現工具列第一個圖片之下會顯示輸入的文字。


在「屬性頁」之「按鈕」頁籤中,再按下「插入按鈕(N)」,「索引」的值會增加,可陸續增設其它圖片進入工具。


若要工具列中有空格,可以不指定「影像」,再在「樣式」中點選 "3-tbrSeperator"。


ToolBar 圖片設定全部完成後,按下「確定」按鈕。


程式中對應工具列按下各個圖片,對應執行的程式碼安排在 Toolbar_ButtonClick 事件程序中,藉由參數 Button.Index (即 Toolbar「屬性頁」之「按鈕」頁籤中,「索引」)的值,來分辨按到的是那個圖片。


若以此範例執行,在工具列按下「開新檔案」


則執行MsgBox "開新檔案",顯示訊息視窗如下。


按下「12」,顯示訊息視窗如下。


若 Toolbar 屬性頁之「標題」全部空白,則圖示全部縮小如下。

TOP

[glow=570,#8B008B,6]指定色彩的方法[/glow]

以程式碼指定色彩的方法
第一個是直接指定顏色的代碼(用16進位法分成四個 bytes表示,一如屬性視窗顯示之色彩值)
Ex: Text1.BackColor = &H800000


第二種是VB內建的系統色彩常數
(這裡的色彩大都是常用顏色 ex.卷軸色,現用的標題列顏色等)
Ex: Text1.BackColor = vbGreen


第三就是還蠻多人喜歡使用的 QBcolor(color) 函數
Ex: Text1.BackColor = QBColor(3)
顏色顏色
0 黑色 8 灰色
1 藍色 9 淡藍色
2 綠色 10 淡綠色
3 青藍色 11 淡青藍色
4 紅色 12 淡紅色
5 紫紅色 13 淡紫紅色
6 黃色 14 淡黃色
7 淺灰色 15 白色


第四個是使用RGB函數 RGB(red, green, blue)
括號裡的 red, green, blue 可用0~255之間的整數表示其比重 (像調螢幕的色彩一樣)
Ex: Text1.BackColor = RGB(0, 255, 255)

第五個就是使用共同對話框中的色彩對話框
這方法比較人性化也比較輕鬆
Ex:  CommonDialog1.ShowColor
       Text1.BackColor = CommonDialog1.Color



還有一個就是引用其他物件(控制項)的色彩屬性
Ex: Text1.BackColor = txtRef(0).BackColor
 


範例程式:訪客無法瀏覽此圖片或連結,請先 註冊登入會員

TOP

[glow=570,#8B008B,6]錯誤偵測與處理[/glow]

        撰寫程式碼時無論多麼仔細,或多或少都有可能出現錯誤。在最理想的狀況下,Visual Basic 程序根本不需要錯誤處理程式。但遺憾的是,有時刪除檔案會發生錯誤、磁碟空間不足,或網路斷線等,這些突發的情況都會造成程式在執行階段發生錯誤。因此,為了處理這些錯誤,您必須在程序裡加上錯誤處理程式。

有時錯誤也會出現在程式碼內,這種錯誤通常稱為臭蟲 (bug)。小的臭蟲 (例如,游標變得不聽使喚)就可能會令使用者感到不便與困擾,嚴重的錯誤還可能會使應用程式當掉,這時使用者可能就要重新啟動程式,且之前未儲存的工作可能就因此而遺失了。

在應用程式中找出並修正錯誤的過程稱之為偵錯 (debug)。 Visual Basic 提供了幾種工具,用來協助您分析應用程式的運作過程。若要找出錯誤發生的位置,這些偵錯工具非常有用,您還可利用這些工具來修改應用程式,或者研究別人的程式是怎麼運作的。

下面將介紹如何使用 Visual Basic 的偵錯工具,及如何處理執行階段錯誤 — 在程式碼執行時發生的錯誤,以及嘗試完成無效作業所導致的錯誤。

內容提要
如何處理錯誤
Visual Basic 錯誤處理的簡介

設計錯誤處理程式
錯誤處理程序的介紹。

錯誤處理的層級
討論錯誤發生時的各種事件。

產生錯誤以測試錯誤處理
產生錯誤來測試程式碼的方式。

自建錯誤處理
在程序內加入錯誤處理功能。

集中錯誤處理
將錯誤處理子程序加入應用程式中。

關閉錯誤處理
關閉錯誤處理的方法。

ActiveX 元件的錯誤處理
處理其它物件傳回的錯誤。

偵錯的過程
偵錯的介紹。

避免錯誤
建立無錯誤程式的秘訣。

設計階段、執行階段與中斷模式
Visual Basic 的各種模式。

使用偵錯視窗
介紹 Visual Basic 中的偵錯工具。

使用中斷模式
用中斷點來測試程式碼的執行。

執行應用程式中的選取部份
選擇部分程式碼來偵錯。

監看「呼叫堆疊」
使用呼叫堆疊來追蹤應用程式的執行。

使用「即時運算」視窗來測試資料和程序
使用「即時運算」視窗來偵錯。

偵錯注意事項
可能影響偵錯之事件的討論。

偵錯的秘訣
一些有助於簡化偵錯的方法。
 

範例程式 訪客無法瀏覽此圖片或連結,請先 註冊登入會員

TOP

錯誤處理的層級

在您執行 On Error 陳述式且尚未關閉的情況下,已啟動的錯誤處理程式會維持一個作用中的狀態(無論您是透過 On Error GoTo 0 陳述式,或經由退出它被啟動的程序)。現用錯誤處理常式是指目前正處於執行的狀態。要讓其成為作用中的錯誤處理常式,首先應啟動它,然而並非所有已啟動的錯誤處理常式都在執行中。例如,在 Resume 陳述式之後,處理常式雖暫時不執行,但仍然是開啟的狀態。
當錯誤是發生在缺少錯誤處理常式的程序中,或發生在現用錯誤處理常式內時,Visual Basic 會從呼叫清單中搜尋另一個開啟的錯誤處理常式。呼叫清單是引導目前執行程序的呼叫順序,它是顯示於「呼叫堆疊」對話方塊中。您只能在中斷模式下(即當您暫停應用程式的執行時),選取「檢視」、「呼叫堆疊」選項或按下 CTRL+L 鍵,才能顯示「呼叫堆疊」對話方塊。
搜尋呼叫清單

假設以下呼叫發生的順序,如圖 1 所示:
一個事件程序呼叫 程序 A。
程序 A 呼叫 程序 B。
程序 B 呼叫 程序 C。
圖 1 呼叫的順序

當執行程序 C 時,其它程序暫停執行,如「呼叫堆疊」對話方塊中呼叫清單所示。
詳細資訊 進一步的資訊,請參閱本章稍後的〈監看「呼叫堆疊」〉。

圖 2 顯示「呼叫堆疊」對話方塊中的呼叫清單。
圖 2 當程序暫停執行時的呼叫清單

如果在程序 C 中出現錯誤,而且該程序沒有開啟的錯誤處理常式,則 Visual Basic 就會回到呼叫清單中搜尋非現用的程序,首先是程序 B、程序 A,然後是最初的事件程序(但非父程序),並執行找到的第一個開啟之錯誤處理常式。如果於呼叫清單裡的所有地方都沒有發現開啟的錯誤處理常式,則顯示出預設的未預期錯誤訊息,並終止程式的執行。
若 Visual Basic 能找到一個開啟的錯誤處理常式,則此包含錯誤處理常式,且和錯誤發生的同一個程序,就會繼續的執行。若在錯誤處理常式中執行 Resume 或 Resume Next 陳述式,則將如下表所示繼續執行。

陳述式結果
Resume
呼叫 Visual Basic 剛剛重新執行搜尋的地方。在前述呼叫清單中,如果程序 A 有開啟的並含有 Resume 陳述式的錯誤處理常式,則 Visual Basic 會重新執行對程序 B 的呼叫。

Resume Next
執行點將傳回到程序中最後執行處之後的陳述式。也就是適才呼叫 Visual Basic 往回搜尋程序之後的陳述式。在前述呼叫清單中,如果程序 A 有開啟的並含有 Resume Next 陳述式的錯誤處理常式,則執行點將傳回到呼叫程序 B 之後的陳述式。


 
注意,執行的陳述式是在找到錯誤處理常式的程序裡,而不一定得在發生錯誤的程序中。如果您未考慮到這一點,則程式碼的執行方式可能就不像您所想像的。任何時候當錯誤發生時,您都可直接進入中斷模式,讓程式碼更易於偵錯。本章稍後的〈關閉錯誤處理〉內有進一步的說明。

如果錯誤處理常式的錯誤處理範圍,未包含實際產生的錯誤,則已開啟錯誤處理常式的程序中,將發生無法預期的錯誤。像這樣的情況,程序可能會不停地執行下去,特別是如果常式裡還執行 Resume 陳述式的話,更是如此。為防止這類情況發生,您可在常式中的 Case Else 陳述式,使用 Err 物件的 Raise 方法。這麼做會在錯誤處理常式裡實際產生一個錯誤,來強迫 Visual Basic 去呼叫清單中搜尋能夠處理此錯誤的常式。

在 Errors.vbp 範例應用程式的 VerifyFile 程序範例中,將原來 Err.Number 中的程式碼指定給變數 intErrNum,該變數會用來傳遞一個引數到 Case Else 陳述式裡,Err 物件的 Raise 方法中,並由此而產生錯誤。當這類錯誤發生在作用中的錯誤處理常式時,搜尋動作便會回到呼叫清單開始的地方。


將錯誤分配到不同的處理常式
回到呼叫清單中搜尋的效果難以得知,因為這點取決於能夠順利處理錯誤的常式,是否執行了 Resume 或 Resume Next。Resume 會傳回控制權到包含錯誤處理常式之外,最近執行的呼叫執行點。Resume Next 則是將控制權,傳回到包含錯誤處理常式之外,緊跟著最近呼叫執行點之後的陳述式。

例如,在圖 13.3 所示的呼叫清單中,如果程序 A 含有開啟的錯誤處理常式,而程序 B 和 C 未包含這樣的程式,則在程序 C 中發生的錯誤將由程序 A 的錯誤處理常式來處理。如果錯誤處理常式是使用 Resume 陳述式,退出常式後,則程式會繼續呼叫程序 B。然而,若程序 A 的錯誤處理常式是使用 Resume Next 陳述式,則退出常式後,在呼叫程序 B 之後的程序 A 中任一個陳述式,會繼續被執行。這兩種錯誤處理常式的情況,都不會直接將控制權傳回到最初發生錯誤的程序或陳述式中。


複雜錯誤處理指南
當您使用多個模組來撰寫大型的 Visual Basic 應用程式時,錯誤處理程式可能會變得相當複雜。因此,請牢記以下這些要點:
當您在偵錯程式碼時,應在所有錯誤處理常式中使用 Err 物件的 Raise 方法來重新產生錯誤,以防常式中沒有程式碼可處理該特定錯誤的情況。這麼做,可讓您的應用程式可從呼叫清單中,依循找到其它的錯誤處理常式,來試著更正發生的錯誤。同時也可確定若您的程式碼無法處理發生的錯誤時, Visual Basic 就會顯示出錯誤訊息。在測試程式碼的時候,這個技巧可協助您去揭露沒有適時處理的錯誤。但是,對於一個獨立的執行檔,應該切記:如果執行 Raise 方法,且無任何其它程序偵測到錯誤,則應用程式將立即終止執行,且無任何 QueryUnload 或 Unload 事件發生。

在處理錯誤之後,如果您確定要清除 Err 物件,可使用 Clear 方法。當您在自建錯誤處理中使用 On Error Resume Next 時,這種做法是必需的。Visual Basic 在執行任何型態的 Resume 陳述式、Exit Sub、Exit Function、Exit Property 或 其它 On Error 陳述式,任何時候都會自動地呼叫 Clear 方法。

若您不要呼叫清單中的另一個程序去偵測錯誤,可使用 Stop 陳述式來強制終止程式的執行。Stop 可讓您用來檢視錯誤的內容,以便在開發環境裡更精簡您的程式碼。

附註 在您建立執行檔之前要確定移除了所有 Stop 陳述式。若一個獨立的 Visual Basic 應用程式(執行檔)碰到 Stop 陳述式,則會將其當成 End 陳述式來處理,而立即終止程式的執行,且沒有任何 QueryUnload 或 Unload 事件發生。

撰寫一個 fail-safe 的錯誤處理程序,所有的錯誤處理常式都可呼叫它作為最後手段,來解決無法處理的錯誤。fail-safe 程序能夠經由釋出表單和儲存資料,依執行順序來終止應用程式。

詳細資訊 請參閱本章稍後的〈自建錯誤處理〉、〈設計階段、執行階段與中斷模式〉及〈產生錯誤以測試錯誤處理〉。

TOP

產生錯誤以測試錯誤處理

利用模擬錯誤來測試您的應用程式,是非常有用的方法;或者是當您要把某種特定情況,當成是 Visual Basic 的執行階段錯誤。例如,您可能撰寫一個模組,而使用的物件是由外部應用程式所定義的物件,則從這個物件所傳回的錯誤,就可將其當成是應用程式中其餘部分所產生的 Visual Basic 錯誤來處理。
為測試所有可能發生的錯誤,您可能需要在程式碼中產生一些錯誤。在程式碼中可使用 Raise 方法來產生錯誤:
object .Raise argumentlistobject 引數通常是 Err,即 Visual Basic 定義的所有錯誤物件。argumentlist 引數是指名引數清單,它可用來傳遞方法。在 Errors.vbp 範例應用程式中, 在 Errors.vbp 範例應用程式的 VerifyFile 程序即使用以下的程式碼,在錯誤處理常式中重新產生目前的錯誤:Err.Raise Number:=intErrNum
在這個情況,intErrNum 是一個變數,包含引發錯誤處理常式的錯誤程式碼。當程式碼的執行到達 Resume 陳述式時,則呼叫 Err 物件的 Clear 方法。在呼叫堆疊裡,必需再次產生錯誤,以傳遞其回到先前的程序。
透過提供該錯誤的錯誤程式碼,您還可以模擬任何 Visual Basic 的執行階段錯誤。Err.Raise Number:=71   ' 模擬「磁碟尚未就緒」之錯誤。

定義您自己的錯誤
有時候,除了 Visual Basic 已經定義的錯誤之外,您可能會需要定義某些錯誤。例如,和數據機連線有關的應用程式,若其傳送的信號失落時就可能產生錯誤。如果您想要產生並偵測自己的錯誤,就可以將您所定義的錯誤程式碼放到 vbObjectError 常數里。
vbObjectError 常數保留的錯誤程式碼範圍,除其本身所有的之外再加上 512。如果您使用高於這個範圍的程式碼,最好確定此錯誤程式碼不會與 Visual Basic 未來的版本或其它 Microsoft Basic 產品相衝突。同樣地,ActiveX 控制項也可以定義它們自己的錯誤程式碼。為了避免程式碼重複的情況,請參閱在您應用程式裡,所使用的控制項說明文件。
定義應用程式的錯誤程式碼,您可在模組中將常數新增到宣告部份。

'錯誤常數
Const gLostCarrier = 1 + vbObjectError + 512
Const gNoDialTone = 2 + vbObjectError + 512
當您認為可能會有任何的內部錯誤發生,這時就可使用 Raise 方法。在此情況下,Err 物件的 description 屬性會傳回一般的描述 ;如「定義的應用程式或物件發生錯誤」。若要給自己所定義的錯誤一個描述,您就需要新增一個參數到 Raise 方法中。

詳細資訊 要知道更多有關產生錯誤的資訊,請參閱〈呼叫方法〉。

TOP

使用偵錯視窗

有時您只要執行部份的程式碼,就可以找出問題發生的原因。然而,在更多的情形下,您必須花費時間去分析資料發生了什麼問題。您可以先區隔問題可能是出在某個不正確的變數或屬性值,然後判斷該變數或屬性為何會被指定為錯誤的值。
使用偵錯視窗,您可以逐步執行應用程式的陳述式,並監看運算式和變數的值。此外,您可使用以下三種偵錯視窗:「即時運算」視窗、「監看」視窗、和「區域變數」視窗。
即時運算視窗所顯示的資訊,是在您的程式中偵錯運算的結果。或您直接在視窗中輸入指令所要求的結果。
圖 1 即時運算視窗

詳細資訊 關於「即時運算」視窗的進一步資訊,請參閱本章稍後的〈使用「即時運算」視窗來測試資料和程序〉。
監看視窗顯示目前的監看運算式,也就是您希望在程式執行階段,所監看運算的值。中斷運算式是一個讓您預先設定某種情況成立時,會讓 Visual Basic 進入中斷模式的運算式。在「監看」視窗中,「內容」欄位指出程序、模組,或模組裡每個進行運算的監看運算式。只有當目前陳述式在指定的內容中時,「監看」視窗才能顯示出監看運算式的值。否則,在「值」這個欄位會顯示訊息,指出陳述式不在內容中。要打開「監看」視窗,您可選取「檢視」功能表中的「監看視窗」。圖 2 顯示了「監看」視窗。
圖 2 監看視窗


詳細資訊 關於「監看」視窗的進一步資訊,請參閱本章稍後的〈使用監看運算式來監看資料〉。
區域變數視窗顯示目前程序中所有變數的值。當程式的執行點從一個程序切換到另一個程序時,「區域變數」視窗的內容會隨著改變,但只反映適合於目前程序的變數。要開啟「區域變數」視窗,您可選取「檢視」功能表中的「區域變數視窗」。圖 3 顯示了「區域變數」視窗。
圖 3 區域變數視窗


目前的程序和表單(或模組)決定可顯示的哪些變數,是依據〈程式設計基本觀念〉中的〈瞭解變數的範圍〉所提供的範圍規則。 舉例來說,假設「即時運算」視窗指出 Form1為目前表單。在此情況下,您就可在 Form1 中顯示任何表單級的變數。您還可使用 Debug.Print 來檢查「程式碼」視窗中所顯示程序的區域變數。(您可一再地檢查公用變數的值。)有關如何顯示在「即時運算」視窗中訊息的進一步資訊,請參閱本章稍後的〈使用「即時運算」視窗來測試資料和程序〉。

TOP

使用中斷模式

在設計階段,您可改變應用程式的設計或程式碼,但是您卻無法得知這些改變將如何影響應用程式的執行。在執行階段,您才可以看見應用程式的運作情況,但卻無法直接去修改程式碼。
中斷模式能停止應用程式的執行動作,並提供任何時刻之應用程式的狀態資訊。且變數和屬性設定值會被記錄下來,所以您可以分析、判斷應用程式現在的狀態,並可輸入修改的變數值,看是否會影響應用程式的執行。當應用程式處於中斷模式時,您可以:
修改應用程式中的程式碼。
觀察應用程式介面的狀態。
瞭解有哪些程序被呼叫。
監看變數、屬性和陳述式的值。
改變屬性和變數的值。
檢視或控制應用程式即將執行下一行陳述式。
立即執行 Visual Basic 陳述式。
以手動方式來控制應用程式的運算。

附註 您可以在設計時設定中斷點和監看式,但其它的偵錯工具,則只能在中斷模式中才有作用。
執行至問題陳述式時進入中斷模式
在偵錯時,您可能希望應用程式能夠暫停在發生問題的程式碼處。為此, Visual Basic 提供了中斷點和 Stop 陳述式。中斷點就是定義某陳述式或某種特定的狀況,可讓 Visual Basic 能夠自動地停止執行,且不執行包含中斷點的陳述式,並直接進入中斷模式。關於 Stop 陳述式與中斷點的比較,請參閱本章稍後的〈使用 Stop 陳述式〉。
在應用程式執行的時候,您可以用下列的手動方式進入中斷模式:
按下 CTRL+BREAK
從「執行」功能表中選取「中斷」。
選取工具列上的「中斷」按鈕。

當應用程式處於閒置狀態時(介於事件的處理過程中),會比較容易中斷程式的執行。當中斷發生,應用程式雖不會停留在特定的某一行,但 Visual Basic 仍將切換到中斷模式。

當以下任何情況發生時,都會自動地進入中斷模式:
當某行陳述式產生一個無法偵測的執行階段錯誤。
陳述式產生一個執行階段的錯誤,且在錯誤捕捉方式是選取「中斷在所有的錯誤點」選項。
在「新增監看式」對話方塊中所定義的中斷運算式,其值受到改變、或您所定義的條件成立時。
執行到有中斷點的那一行程式碼。
執行到 Stop 陳述式。

修改執行階段錯誤並繼續執行
一些執行階段的錯誤是由於輸入程式碼時的疏忽所造成的,還好這些錯誤都是比較容易解決的。最常見的錯誤包括拼錯名稱,或使用物件的屬性和方法不對。例如,對文字方塊使用了 Clear 方法,或對檔案清單方塊使用 Text 屬性,這些都是錯誤地使用屬性。圖 13.11 顯示執行階段的錯誤訊息。
圖 1 執行階段的錯誤會使程式暫停執行

通常在您將錯誤更正之後,程式便可從暫停的那一行繼續執行,即使您改變了某些程式碼,仍具有此功能。只要您從「執行」功能表中選取「繼續」,或按下工具列上的「繼續」按鈕即可。當應用程式回到執行階段,您就可以確定問題是否已經解決了。

如果您在「選項」對話方塊(可從「工具」功能表中找到)中「一般」頁籤的錯誤捕捉方式選項群組內選取「中斷在所有的錯誤點」選項按鈕,Visual Basic 就會使程式碼中的錯誤處理常式失效,因此當陳述式產生執行階段錯誤時,錯誤處理常式便不會自動處理此錯誤,而會使 Visual Basic 進入中斷模式。如果您沒有選取「中斷在所有的錯誤點」選項按鈕,則程式碼中的錯誤處理常式就會發生功用,它會在程式發生錯誤時執行校正的工作。
有時您所做的一些改變,必須重新啟動應用程式才能發生效用(最常見的情況,像是改變了變數宣告、或加入新的變數或程序)。在這種情況時,Visual Basic 會顯示訊息,詢問您是否要重新啟動應用程式。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。