12.1.2.4 字符串鏈表異常
字符串鏈表異常EStringListError、EListError在用戶對字符串鏈表進行非法操作時引發(fā)。由于許多部件(如TListBox,TMemo,TTabSet,…)都有一個TStrings類的重要屬性,因而字符串鏈表異常在部件操作編程中非常有用。
EStringListError異常一般在字符串鏈表越界時產生。例如對如下初始化的列表框:
ListBox1.Items.Add('First item');
ListBox1.Items.Add('Second item');
ListBox1.Items.Add('Third item');
則以下操作都會引起EStringListError異常:
ListBox1.Item[3] := ' Not Exist';
str := ListBox1.Item [3];
EListError異常一般在如下兩種情況下引發(fā):
1.當字符串鏈表的Duplicates屬性設置為dupError時,應用程序試圖加入一個重復的字符串;
2.試圖往一個排序的字符串鏈表中插入一個字符串。
12.1.3 部件異常類
12.1.3.1 通用部件異常類
通用部件異常類常用的有三個:EInvalidOperation、EComponentError、EOutOfResource。其中EInvalidOperation、EOutOfResource在Controls單元中定義;EComponentError在Classes單元中定義。
1.非法操作異常 EInvalidOperation
EInvalidOperation 引發(fā)的原因可能有:
● 應用程序試圖對一個Parent屬性為nil的部件進行一些需要Windows句柄的操作
● 試圖對一個窗口進行拖放操作
● 操作違反了部件屬性間內置的相互關系等
例如,ScrollBar、Gauge等部件要求Max屬性大于等于Min屬性,因而下面的語句:
ScrollBar1.Max := ScrollBar1.Min-1;
將引發(fā)一個EInvalidOperation異常。
2.部件異常EComponentError
引發(fā)該異常的原因可能有:
● 在Register過程之外試圖登錄一個部件(常用于自定義部件開發(fā)中)
● 應用程序在運行中改變了一個部件的名稱并使該部件與另一個部件重名
● 一個部件的名稱改變?yōu)橐粋Object Pascal非法的標識符
● 動態(tài)生成一個部件與已存在的另一部件重名
3.資源耗盡異常EOutOfResource
當應用程序試圖創(chuàng)建一個Windows句柄而Windows 卻沒有多余的句柄分配時引發(fā)該異常。
12.1.3.2 專用部件異常類
許多部件都定義了相應的部件異常類。但并不是有關部件的任何錯誤都會引發(fā)相應的異常類。許多情況下它們將引發(fā)一個運行時間異常或對象異常。
下面列出幾個典型的部件異常類。
1.EMenuError
非法的菜單操作,例如試圖刪除一個不存在的菜單項。這一異常類在Menus庫單元中定義。
2.EInvalidGridOpertion
非法的網格操作,比如試圖引用一個不存在的網格單元。這一異常類在Grids庫單元中定義。
3.EDDEError
DDE異常。比如應用程序找不到特定的服務器或會話,或者一個聯(lián)接意外中止。這一異常類在DDEMan庫單元中定義。
4.EDatabaseError,EReportError
數據庫異常(EDatabaseError)和報表異常(EReportError) 在進行數據庫和報表操作出現錯誤時引發(fā)。有關數據庫的問題請讀者參閱本書第二編。
12.1.4 小結
在這一節(jié)中重點介紹了Delphi提供的異常類體系。我們力求給讀者一個清晰、全面的印象,使讀者能在自己的程序開發(fā)中實際使用它們。為便于理解我們也提供了一些簡單的說明性示例。雖然在具體的使用中讀者還可能會碰到許多問題,但意識到應該用異常類來增強程序的健壯性卻是程序設計水平走上新臺階的標志。
12.2 異常保護
確;厥辗峙涞馁Y源是程序健壯性的一個關鍵。但缺省情況下異常發(fā)生時程序會在出錯點自動退出當前模塊,因此需要一種特殊的機制來確保即使在異常發(fā)生的情況下釋放資源的語句仍能被執(zhí)行。而Delphi的異常處理正提供了這種機制。
相關推薦:2010年9月計算機等級考試試題及答案解析專題北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內蒙古 |