الجميع يقوم بكتابة البرامج والجميع يقع في الأخطاء
كم مرة كتبت برنامج وسهرت الليالي وانت تحاول تقليل نسبة الأخطاء في البرنامج,
من منا لا يذكر الـ VB 6.0 وجملته الشهيرة " Run – Time Error "
مرات ومرات تقف هذه الجملة في وجهك, تكتب الكود وتحاول تفاديها وكأنها عدوك اللدود.
وفي النهاية ينتهي البرنامج وتكتمل الفرحة وتقوم لتخبر صديقك وتريه البرنامج, وفجأة ...
"Run – Time Error"ويقفل البرنامج,
تسودّ الدنيا ونبدأ لعبة القط والفأر من جديد, أين حصل الخطأ وما السبب ؟؟؟!!!
أتت تقنية الـ .NET لتريحنا من جملة الـ VB 6.0 فلم نعد نراها, بل ما نراه هو شرح الخطأ,
والأجمل أن البرنامج لا يقفل وهذا ما يريح نفسية المستخدم إلى حد كبير.
خلال السنوات الثلاث الأخيرة لاحظت ان أغلب المبرمجين يحاولون اصطياد الاخطاء
من خلال (Try...Catch…End Catch) في الإجراءات
التي يتوقعون حدوث اخطاء فيها, ويتركون تلك التي ليست ذات أهمية عالية, واغلب هؤلاء
لا يقومون بمعالجة الخطأ او اظهار رسالة تخبر المستخدم بحودث خطأ.
هذه المقدمة كانت للفت نظر الأخوة الأعزاء الى ضرورة الانتباه الى ان اصطياد الاخطاء
مسألة مهمة, وهنا سأقدم الطريقة التي استخدمها منذ فترة ليست بالقصيرة,
وهي التي تسمح باصطياد جميع اخطاء البرنامج من خلال إجراء واحد فقط, فلم تعد بحاجة
إلى كتابة جملة Try…Catch هنا وهناك – إلى حد ما –
إجعل برنامجك يبدأ بالتنفيذ من Sub Main واكتب هذا الكود في الـ Module:
Imports System.Threading
Module mdlMain
Public Sub Main()
Dim frm As New frmMain
AddHandler Application.ThreadException, New ThreadExceptionEventHandler(AddressOf GlobalErrorProc)
Application.Run(frm)
End Sub
Public Sub GlobalErrorProc(ByVal sender As Object, ByVal args As ThreadExceptionEventArgs)
MessageBox.Show("An unhandled exception has occured: " & args.Exception.Message, _
"Unhandled Exception", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Sub
End Moduleهكذا إذا حصل أي خطأ سيظهر رسالة للمستخدم. تخبره نوع الخطأ وتعلمك
بالسطر الذي حدث فيه الخطأ وضمن أي إجراء – أي بالتفصيل الممل-.
في المثال المرفق قمت بتنسيق الرسالة التي تظهر للمستخدم, يمكن لكل شخص تعديلها
حسب رغبته, ولكن تجدر الإشارة هنا الى انه يجب تسجيل هذه الاخطاء في ملف على القرص
الصلب بحيث يمكنك مراجعة هذا الملف لمعرفة الأخطاء التي ظهرت عند المستخدم
هذا ما أعرفه إن شاء الله يستفيد منه الأخوة الكرام
إذا كان أحد الأخوة لديه فكرة أو طريقة ثانية يا ريت ينورنا بها