ข้อยกเว้นที่เรียกว่าหมายถึงข้อผิดพลาดชั่วคราวที่เกิดจากปัญหาในโปรแกรมเองหรือการทำงานที่ไม่เหมาะสมโดยผู้ใช้ระหว่างการทำงานของโปรแกรม
หยุดการทำงานของโปรแกรมและสร้างผลลัพธ์ที่ผิดพลาด ใครก็ตามที่เคยเขียนโปรแกรมใน Delphi จะคุ้นเคยกับข้อยกเว้นอย่างแน่นอน แหล่งที่มาของข้อยกเว้น
มีหลายแง่มุม การอ้างอิงถึงตัวชี้ว่าง การกำหนดนอกขอบเขต การหารด้วยศูนย์ ฯลฯ ทั้งหมดนี้อาจทำให้เกิดข้อยกเว้นได้ หากไม่มีมาตรการที่เหมาะสมสำหรับเหตุการณ์ผิดปกติ
การจัดการที่ไม่เหมาะสมอาจทำให้โปรแกรมทั้งหมดหยุดทำงาน โชคดีที่ Delphi สามารถจัดการข้อยกเว้นเกือบทั้งหมดที่อาจเกิดขึ้นได้โดยอัตโนมัติ
จัดการกับ.
1. ตัวอย่างง่ายๆ ของ Delphi ในการจัดการข้อยกเว้นโดยอัตโนมัติ
1. ในสภาพแวดล้อมแบบรวม Delphi (3.0) ให้เลือกเมนูเครื่องมือ | ตัวเลือกสภาพแวดล้อม และในสภาพแวดล้อมที่ปรากฏขึ้น
มีตัวเลือกการหยุดข้อยกเว้นบนหน้าการตั้งค่าในหน้าต่างตัวเลือก (ที่ด้านซ้ายล่าง) ตัวเลือกนี้เป็นค่าเริ่มต้น
เลือกสถานะแล้ว ดังนั้นหากมีข้อยกเว้นเกิดขึ้นเมื่อรันโปรแกรมในสภาพแวดล้อมแบบรวมของ Delphi โปรแกรมจะถูกขัดจังหวะและส่งคืนโดยอัตโนมัติ
ในสถานะการแก้ไขจุดบกพร่องของ Delphi เคอร์เซอร์จะยังคงอยู่ในโค้ดที่มีข้อยกเว้นเกิดขึ้น เพื่อให้โปรแกรมเมอร์สามารถแก้ไขได้ ตอนนี้คลิกที่ตัวเลือกนี้เพื่อทำให้ไม่พร้อมใช้งาน
ตรวจสอบแล้วตกลง
2. สร้างโปรเจ็กต์ใหม่และบันทึกเป็น Excep.dpr (จะมีประโยชน์ในภายหลัง) และบันทึกหน่วยที่เกี่ยวข้องเป็น Excpunit.pas ใน Form1
ใส่ส่วนประกอบ TmaskEdit ลงไป ตั้งค่าคุณสมบัติ EditMask เป็น Date จากนั้นใส่ส่วนประกอบ Tbutton แล้วดับเบิลคลิก
เขียนเหตุการณ์ OnClick ดังนี้:
ขั้นตอน TForm1.BitBtn1Click (ผู้ส่ง: TObject);
var k:จำนวนเต็ม;
เริ่ม
เค:=0;
k:=9 div k;{ข้อยกเว้นจะหารด้วย 0 จะถูกสร้างขึ้นที่นี่}
จบ;
3. บันทึกและรันโปรแกรม เพียงเขียนตัวเลขหนึ่งหรือสองตัวใน MaskEdit1 แล้วกด Enter
ข้อยกเว้นปรากฏขึ้นในหน้าต่างต่อไปนี้:
นี่เป็นข้อยกเว้นเนื่องจากการป้อนข้อมูลที่ไม่สมบูรณ์ในกล่อง MaskEdit จะจัดการคลิกโดยอัตโนมัติ
หลังจาก "ตกลง" โปรแกรมจะดำเนินการต่อ คลิก Button1 หน้าต่างอื่นที่คล้ายกันจะปรากฏขึ้น เนื่องจากมี
หารด้วยข้อยกเว้นเป็นศูนย์
2. การแจ้งสถานการณ์ผิดปกติของ Delphi เป็นภาษาอังกฤษ ซึ่งคนจีนไม่ได้ใช้ เราสามารถสกัดกั้นข้อยกเว้นเหล่านี้และนำไปใช้ได้
เคล็ดลับภาษาจีน ขั้นตอนเฉพาะมีดังนี้:
1. แก้ไขเหตุการณ์ OnClick ของ Button1 ดังนี้:
ขั้นตอน TForm1.BitBtn1Click (ผู้ส่ง: TObject);
var k:จำนวนเต็ม;
เริ่ม
เค:=0;
พยายาม
k:=9 div k;
ยกเว้น
showmessage('ตัวหารไม่สามารถเป็นศูนย์ได้');
จบ;
จบ;
2. บันทึกและรันโปรแกรม กล่องข้อความที่ปรากฏขึ้นหลังจากคลิก Button1 จะถูกแทนที่ด้วยข้อความภาษาจีน "ตัวหารไม่สามารถเป็นศูนย์ได้" ใช้
คำสั่ง try...ยกเว้น...end เป็นวิธีการทั่วไปในการจัดการกับข้อยกเว้น คำสั่งหลังคำสงวน try จะถูกดำเนินการหาก
หากมีข้อยกเว้นเกิดขึ้น คำสั่งระหว่างคำที่สงวนไว้ยกเว้นและจุดสิ้นสุดจะถูกดำเนินการ มิฉะนั้น คำสั่งที่อยู่หลังจุดสิ้นสุดจะถูกดำเนินการ ดังนั้นจะแทนที่ของ Delphi
การจัดการข้อยกเว้นเริ่มต้น อีกคำสั่งที่คล้ายกันคือ try...finally...end ซึ่งเหมือนกับ try...ยกเว้น..
...ข้อแตกต่างกับ end ก็คือ ไม่ว่าคำสั่งหลัง try จะสร้างข้อยกเว้นหรือไม่ก็ตาม คำสั่งหลังจาก ในที่สุด จะถูกดำเนินการอย่างแน่นอน
อย่างไรก็ตาม สำหรับข้อยกเว้นเช่นที่สร้างโดยกล่อง TmaskEdit การใช้คำสั่ง try นั้นไม่มีอำนาจเนื่องจากเราไม่พบ
สถานที่สำหรับเขียนคำสั่ง try เราสามารถแก้ไขได้ด้วยวิธีอื่นเท่านั้น
3. ทุกโปรเจ็กต์ใน Delphi มีวัตถุ Tapplication ซึ่งเป็นวัตถุที่มองไม่เห็น เราทำได้
โดยการแก้ไขเหตุการณ์ OnException คุณสามารถควบคุมข้อยกเว้นพิเศษได้ วิธีการเฉพาะมีดังนี้:
1. ประกาศกระบวนการ MyException ในคลาสของ Form1 กระบวนการนี้เกี่ยวข้องกับเหตุการณ์ OnException ของ Tapplication
พารามิเตอร์เดียวกัน:
สาธารณะ
{ประกาศสาธารณะ}
ขั้นตอน MyException (ผู้ส่ง: TObject; E: ข้อยกเว้น);
2. เขียนรหัสกระบวนการ:
ขั้นตอน TForm1.MyException (ผู้ส่ง: TObject; E: ข้อยกเว้น);
เริ่ม
ถ้า E เป็น EDBEditError แสดงว่าแสดงข้อความ ('อินพุตไม่สอดคล้องกับกฎ')
อื่น
Application.ShowException(E); {การเรียกการจัดการข้อยกเว้นเริ่มต้น}
จบ;
3. กำหนดค่าให้กับเหตุการณ์ OnException ของ Tapplication ในเหตุการณ์ OnCreate ของ Form1:
ขั้นตอน TForm1.FormCreate (ผู้ส่ง: TObject);
เริ่ม
Application.OnException :=MyException;
จบ;
4. บันทึกและรันโปรแกรม ป้อนตัวเลขหนึ่งหรือสองตัวในกล่อง MaskEdit กด Enter จากนั้นกล่องข้อความภาษาจีนจะปรากฏขึ้น
แทนที่กล่องพร้อมท์ภาษาอังกฤษดั้งเดิม
4. ในที่นี้เราอยากจะเตือนทุกคนให้ใส่ใจกับสามประเด็น:
1.Delphi สรุปข้อยกเว้นทั้งหมดไว้ในคลาสเดียว นั่นคือ คลาสข้อยกเว้น (Exception)
กรณีพิเศษ ใน sysutils.pas ในไฟล์ c:program orlandDelphi 3source tlsys ไดเร็กทอรี
มีคำจำกัดความของคลาสข้อยกเว้น
2. วัตถุ Tapplication จัดเตรียมกระบวนการ HandleException เพื่อจัดการกับข้อผิดพลาดที่ไม่สามารถจัดการได้ซึ่งเกิดขึ้นในโปรแกรม
เหตุการณ์ข้อยกเว้น เมื่อเรากำหนดค่าให้กับเหตุการณ์ OnException ของ Tapplication แล้ว HandleException จะเรียกเหตุการณ์ใหม่
ขั้นตอนการเปลี่ยนการแสดงข้อความแสดงข้อผิดพลาดเริ่มต้น เรามีอิสระในการจัดเรียงเนื้อหาที่แสดงตามกระบวนการของเราเองเพื่อให้บรรลุถึง Han
ผลการเปลี่ยนแปลง
3. เราใช้คำสั่ง IF เพื่อรับข้อยกเว้นที่ระบุ เราสามารถใช้วิธีง่ายๆ เพื่อรับชื่อของข้อยกเว้นที่ระบุ
กลับมาที่ตัวอย่างตอนต้นบทความ ที่นี่เราเลือกตัวเลือก Break onException รันโปรแกรมอีกครั้ง และป้อน
ตัวเลขที่ไม่เหมาะสมทำให้ MaskEdit1 สร้างข้อยกเว้น และหน้าต่างต่อไปนี้จะปรากฏขึ้น:
EDBEditError ในแถวที่สองของหน้าต่างคือชื่อของข้อยกเว้น รหัสในโปรแกรมในบทความนี้:
ถ้า E เป็น EDBEditError แสดงว่าแสดงข้อความ ('อินพุตไม่ตรงตามข้อกำหนด')
มันถูกเขียนขึ้นตามชื่อนี้ นี่คือที่ที่คุณจะได้รับข้อมูลเมื่อคุณไม่ทราบชื่อที่แน่ชัดของข้อยกเว้น ใช้สิ่งนี้
โปรดใช้ความระมัดระวังในการจัดการเหตุการณ์ข้อยกเว้น เนื่องจากคุณได้แทนที่การจัดการข้อยกเว้นเริ่มต้นของ Delphi แล้ว
นี่อาจทำให้ระบบล่มได้
โปรแกรมข้างต้นทำงานได้สำเร็จภายใต้ Windows 95 Delphi 3.0