المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : الدرس الرابع : واجهة Orcas الأساسية .net 2008


khaledbelal
02-16-2010, 03:11 AM
بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .

في هذا الأسبوع ، سوف نتحدث كما هو موضح بالجدول عن الموضوع التالي :

بنية اللغة .net والتعرف على الطرق والخصائص والفئات ... ال Structs وال Enums وكل ما يتعلق ببنية البرمجة .


وقبل البداية ، سنقسم هذا الموضوع إلى جزئين ، يحتوي الجزء الأول هنا على كيفية استخدام أدوات .net لكتابة الكود - اقصد ال Visual Studio 2008 أو غيره ، فيما سنبدأ بالتعرف على مكوناته في الجزء الثاني من الدرس بعد غد إن شاء الله .

بسم الله نبدأ ...

كيف اكتب الكود ؟

الإجابة التقليدية على السؤال السابق هي من خلال Visual Studio 2008 ، إلا أن هذه الاجابة ليست مكتملة تماماً ، فالإجابة الصحيحة هي انه ومن خلال وجود فقط .net framewrok 3.5 development kit على أي جهاز فإنك ستكون قادراً على تطوير تطبيقات .net 2008 ، سنتعرف في هذا الدرس على عجالة على بعض هذه الطرق قبل ان ننتقل للحديث حول الطريقة الاساسية التي سنتعامل معها من خلال Visual Studio 2008 ...

مبدئياً يمكنك تحميلها من هذا الرابط (http://www.microsoft.com/downloads/details.aspx?FamilyId=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en)

*** استخدام Visual Studio 2008 Command Prompt :

http://vb4arab.com/vb/uploaded/3/01203677152.jpg

لو افترضنا اننا سنقوم ببرمجة C# ، يمكنك من خلاله كتابة الأمر csc -? الإطلاع على الأوامر المطلوبة ، ستكون هذه الأوامر كافية لتستطيع البدء بترجمة كود C# ، لكن ستتضطر لعمل كل شيء يدوياً ، ستحتاج لتحديد ال out والاسمبلي والملفات .... الخ ، في المقابل ستستفيد من ميزة كونك تقوم بعمل كل شيء يدويا وهو ما يتيح لك فرصة ذهبية للتحكم في كل ما يتعلق بالبرنامج من الألف إلى الياء .

يمكنك معرفة المزيد ابتداء من هذا الرابط من مايكروسوفت :
http://msdn2.microsoft.com/en-us/library/78f4aasd(VS.80).aspx

استخدام ال TextPad :

تطبيق قابل لاعادة التهيئة ، بمعنى انه قابل للعمل على اي شيء وقابل للتخصيص ليعمل كأي شيء ، نسخة مطورة من ال Notepad قابله للتطوير والتعديل ، يمكنك استخدامها كاداة تحرير لاي لغة برمجةاو صفحات ويب او HTML او حتى اسمبلي ... يمكنك استخدامها لتريب اوراقك ... لأي شيء ما دمت تستطيع تعديل الخصائص المطلوبة .

http://www.textpad.com/img/screenshot/tp5_vista.jpg

واحدة من ضمن خصائص ال TextPad انك تستطيع اضافة ملف لتعريف لغة C# او vb.net عليه ، بعد اضافة الملف ستجده يقوم بتلوين الأكواد كما في visual studio ، يمكنك اضافة امر Compile حيث تجد نسخة من ال RE المستخدمه للغة ال C# ... الخ ، لمعرفة المزيد حول هذا الموضوع يمكنك تتبع الرابط التالي والانطلاق منه :
http://www.eggheadcafe.com/community/aspnet/2/10014016/textpad-and-c.aspx

كما تستطيع ان تجد ملفات كل لغات البرمجة او الوصف لتركيبها على ال Textpad هنا :
http://www.textpad.com/add-ons/cliplibs.html

بامكانك التعديل في لغة البرمجة نفسها إن اردت عن تغيير ال RE ، لو قمت بوضع قوانين للغة البرمجة خاصتك فباستطاعتك تنفيذها على ال Textpad ايضاً .

استخدام Notepad++ :

تطبيق مماثل ، إلا انه مجاني بالكامل ، يتيح لك بعض الخصائص التي ربما لا تتوفر لل Textpad مثل خاصية ال auto complete ، اضف لذلك انه مفتوح المصدر بمعنى انه متاح بالسورس كود .


http://static.flickr.com/76/219446470_b6e953f19b_o.png



يمكنك معرفة المزيد هنا :
http://notepad-plus.sourceforge.net/uk/about.php

البرنامج نفسه تجده هنا مع مراحل تطويره حيث انه Open Source .
http://sourceforge.net/projects/notepad-plus/


SharpDevelop :
موجه لخدمة ال C# ، يتميز بوجود واجهة للتصميم ايضاً :
http://static.icsharpcode.net/OpenSource/SD/TeaserSharpDevelop2OnVista.png

أولا - تنقيح الأخطاء Debugging Your Application

عند تطوير تطبيق ما يواجه المبرمج مشاكل وأخطاء تظهر أثناء التنفيذ أو الترجمة وتنقسم هذه الأخطاء إلى عدة أنواع: خطأ بالصيغة وهذا يسهل اكتشافه حيث لن يقوم الـ Compiler بترجمة المشروع وتنفيذه إن وجد خطأ من هذا النوع وقد تعترض عليه بيئة التطوير أثناء كتابتك لشفرة البرنامج - خط أحمر تحت العبارة - وأخطاء وقت التنفيذ وهذه أخطاء طارئة تحدث أثناء تنفيذ البرنامج ويجب مراقبتها في الشيفرة وهنا نستخدم عبارة Try ... Catch لحصر تلك الأخطاء وتجاوزها مثل عندما يحاول البرنامج فتح ملف قد يكون غير متوفر للفتح لأسباب متعددة مرتبطة ببيئة التشغيل وستجد شرحا عن هذا الأمر في موضوعي الاستثناءات Exceptions اصطياد الأخطاء ومعالجتها ونوع آخر وهي أخطاء منطقية في الكود حيث تلاحظ أن صيغة الأوامر صحيحة ولكن البرنامج لايقوم بالعمل كما يجب ففي هذه الحالة طرق تجاوز النوعين السابقين من المشاكل لن تفيدك وستضطر لاستخدام أدوت التنقيح Debugging tools لحصر وتصحيح تلك المشاكل وفيما يلي بعض النقاط التي تساعدك على استخدام هذه الأدوات لتجاوز المشاكل من النوع الأخير راجيا أن تغطي هذه العجالة قسما مما يستحقه هذا الموضوع من البحث

- يمكنك وضع نقاط التوقف Break Points لإيقاف تنفيذ البرنامج عند سطر معين ويمكن بعد التوقف متابعة تنفيذ البرنامج باستخدام F11 للمتابعة سطر سطر أو F5 لمتابعة تنفيذ البرنامج
يمكن وضع نقاط التوقف أو إزالتها باختيار البند Toggle Breakpoints من قائمة Debug أو ضغط المفتاح F9 أو النقر على الهامش الرمادي بجانب السطر المراد التوقف عنده وتظهر دائرة حمراء بجانب السطر دلالة على وضع نقطة التوقف عنده
- لتشغيل البرنامج مع التنقيح اختر Start Debugging من قائمة Debug أو اضغط F5 ولتشغليه بدون تنقيح اختر Start Without Debugging أو اضغط Ctrl+F5
- يمكنك ضغط المفتاح F11 لبدء البرنامج مع التنقيح سطر سطر
- اضغط F11 سترى أنك قد انتقلت لأول سطر كود سيتم تنفيذه ولمتابعة تنفيذ البرنامج سطر سطر تابع ضغط F11 سترى في كل مرة أنه قد نفذ سطرا آخر من البرنامج حيث يمكنك استخدام هذه الطريقة للفهم الدقيق لكيفية تنفيذ البرنامج
- يمكنك إيقاف تنفيذ البرنامج وذلك إما بالضغط على زر التوقف من شريط الأدوات أو Shift-F5
- اضغط F5 لتشغيل البرنامج وبهذا يبدأ تشغيل المنقح ويستمر تنفيذ الكود حتى يمر على نقطة توقف Break Point وعندها يتوقف عند السطر المحدد بنقطة التوقف المحددة سابقا وبينما أنت في وضع التوقف يمكنك متابعة بيانات الفئات في البرنامج عبر نافذتي Auots و Locals
- نافذة locals تريك جميع المتغيرات المعرفة ضمن مجال التنفيذ الحالي حيث يمكنك استخدامها لرؤية جميع خصائص تلك المتغيرات وقيمها ونافذة Autos تعمل بطريقة مشابهة ولكنها ترينا متغيرات قد لاتكون معرفة ضمن مجال التنفيذ الحالي
- إذا أوقفت مؤشر الفأرة فوق متغير أو خاصية ما وأنت في وضع التوقف ستلاحظ ظهور نافذة صغيرة تظهر لك تلك الخاصية وقيمتها ويمكنك عند الحاجة تغيير تلك الخاصية بالنقر المزدوج عليها وكتابة قيمة جديدة أو الضغط بالماوس اليميني عليها ثم اختيار Edit Value من القائمة وتغيير تلك القيمة حيث يمكنك بعدها متابعة التنقيح باستخدام F11
- لتغيير السطر التالي الذي سيتم تنفيذ الكود عنده فقط انقر بالماوس اليميني على الخاصية واختر من القائمة Set Next Statement ستلاحظ تغير مكان السهم الأصفر الذي يدل على السطر التالي الذي سيتم تنفيذه
- عندما توقف مؤشر الفأرة في وضع التوقف فوق نوع بيانات مركب مثل Me التي تشير للفئة الحالية مثلا أو متغير يشير إلى فئة أو تركيب ما أو قد يشير إلى Dataset مثلا يمكنك بالضغط على إشارات + لتنقل ورؤية جميع خصائص تلك الفئة أو نوع البيانات المركب أو تغييرها وذلك بنفس الطريقة التي تستخدمها للتنقل بين عناصر TreeView
- إذا أردت تنفيذ البرنامج حتى يصل لسطر معين يمكنك فعل ذلك مباشرة بدون الضغط على F11 للتنفيذ وذلك بالضغط بالماوس اليميني على ذلك السطر واختيار Run to Cursor حيث سيتم تنفيذ البرنامج حتى ذلك السطر
- لمراقبة قيمة متغير بشكل مستمر نستخدم Watch window حيث يمكنك النقر بالماوس اليميني على ذلك المتغير واختيار Add Watch حيث يمكنك رؤية ذلك المتغير ورؤية قيمته أو تغييرها مباشرة من تلك النافذة و بنفس الطريقة يمكنك أيضا إضافة Watch لأحد المعناصر المركبة ورؤية أو تغيير قيمة إحدى خصائصه
- لإزالة متغير من نافذة Watch فقط انقر بالماوس اليميني عليه في تلك النافذة واختر Delete Watch
- كما يمكنك كتابة اسم المتغير مباشرة في نافذة watch لمراقبته
- في حالة وجود كمية بيانات كبيرة أو بنية بيانات معقدة داخل المتغير كبيانات XML مثلا يمكنك ملاحظة أيقونة مكبرة بجانب تلك القيمة حيث يمكنك إما الضغط على المكبرة مباشرة لعرض البيانات أو النقر على السهم الصغير بجانبها لاختيار طريقة عرض تلك البيانات من القائمة حيث يمكنك اختيار Xml Visualizer مثلا في حالة بيانات من نوع XML
- يمكنك استخدام نقاط التعقب Trace Points ليقوم المنقح بتنفيذ عمل معين عند وصوله لهذه النقطة دون إيقاف تنفيذ البرنامج أو مع إيقاف التنفيذ
- لوضع نقطة تعقب Tracepoint انقر بالماوس اليميني على سطر الكود ثم من القائمة الفرعية Breakpoint اختر Insert Tracepoint وهذا يؤدي إلى ظهور مربع حوار When Breakpoint Is Hit الذي يمكنك من تحديد ماذا تريد أن يفعل عندما يصل التنفيذ لذك السطر حيث يوفر لك امكانية طباعة رسالة أو تنفيذ ماكرو بالإضافة إلى خيار لاستمرار التنفيذ أو إيقافه عند ذلك السطر كما يمكنك استخدام تعابير معينة لإظهار قيم خاصة في سطر الرسالة مثل TICK$ لاظهار استخدام المعالج أو TNAME$ لإظهار اسم مسار التنفيذ الحالي Current Thread Name وعند ضبطها ستلاحظ ظهور معين أحمر بجانب السطر دلالة على Trace Point عوضا عن الدائرة الحمراء التي تشير لـ Break Point وستظهر الرسائل المتعلقة بـ Trace Point في نافذة Output

ثانيا - لاستثناءات Exceptions اصطياد الأخطاء ومعالجتها

التقاط استثناء معين
لالتقاط استثناء نستعمل بلوك Try ... Catch بشكل عام عندما ينفذ البرنامج عملية معينة قد تولد استثناء فلعمل ذلك نقوم بوشع تلك الشيفرة البرمجية بين عبارتي Try و Ctach و بعد العبارة Catch نستكشف الاستثناءات الحاصلة

Try
C = A + B
Catch Ex as OverflowException

ويتيح الجزء Catch للبرنامج اكتشاف استثناء معين والرد عليه فمثلا يمكننا التقاط استثناء القسمة على صفر Devided By Zero

Try
C = A Mod B
TextBox3.Text = C.ToString()
Catch Ex as DividedByZeroException
MsgBox("Devided By Zero.")
TextBox3.Text = "Infinity"
End Try

وبنفس الطريقة يمكننا استكشاف استثناء فيضان Overflow Exception

Dim A, B, C As Integer

Try
A= TextBox1.text
B = TextBox2.Text

C = A + B
Catch Ex as OverflowException
MsgBox("Overflow.")
TextBox3.Text = "Infinity"
End Try

وحتى أيضا يمكننا استخدامه للكشف عن اسم ملف غير صالح

Dim Fname As New String = "D:\Some Folder\FileName.ext"
Dim Sfl as new StreamReader
Try
Sfl = New StreamReader(Fname)
TextBox1.Text = Sfl.ReadToEnd()
Sfl.Close
Catch Ex As FileNotFoundException
MsgBox("File Not Found")
End Try

فحص عدة استثناءات
عندما يمكن أن تؤدي العملية التي تقوم بتنفيذها إلى عدة استثناءات مختلفة يمكنك تحديد سلسلة من الجمل Catch لمعالجة تلك الاستثناءات

Dim FileDB As New OpenFileDialog()

FileDB.Filter = "All files | *.* | Text files | *.txt"

FileDB.FilterIndex = 2
FileDB.InitialDirectory = "C:\Temp"
FileDB.AddExtension = True
FileDB.DefaultExt = "txt"

' Prevent dialog box from validating file
FileDB.CheckFileExists = False
FileDB.CheckPathExists = False

If (FileDB.ShowDialog() = DialogResult.OK) Then
Dim SourceFile As StreamReader

Try
SourceFile = New StreamReader(FileDB.FileName)

TextBox1.Text = SourceFile.ReadToEnd()

SourceFile.Close()
Catch Except As DirectoryNotFoundException
MsgBox("Error: " & Except.Message)
Catch Except As FileNotFoundException
MsgBox("Error: " & Except.Message)
Catch Except As Exception
MsgBox("Error: " & Except.Message)
End Try
Else
MsgBox("User selected Cancel")
End If

معالجة الاستثناءات باستعمال بلوك Catch عام
عندما ينفذ كائن عملية نيابة عن البرنامج فقد يولد نطاقا واسعا من الاستثناءات بناء على سير تنفيذ البرنامج وقد لاتهمك ما هي هذه الاستثناءات بقدر ما يهمك أنه قد حصل هناك استثناء ما ولمعالجة الاستثناءات بغض النظر عن نوعها فإننا لا نحدد استثناء معينا بل نستخدم

Try

..... Some Code Here

Catch Ex As Exception
MsgBox("Error: " & Ex.Message)
End Try

إجراء التظيف بعد حدوث استثناء
عند استعمالك لبلوك Try ... Catch للرد على سلسلة من الاستثناءات ستنفذ عادة عمليات تخص كل استثناء ضمن بلوك Catch المناسب وبناء على الأمور التي يقوم بها برنامجك عليك القيام بعميات معينة بعد حدوث استثناء وذلك بغض النظر عن نوع الاستثناء ولهذا الغرض نستخدم عبارة Finally في نهاية بلوك Try ... Catch تحدد الجمل التي نريد تنفيذها بغض النظر عن نوع الاستثناء مع ملاحظة أن العبارات الموجودة ضمن بلوك Finally سيتم تنفيذها دوما بغض النظر عن حدوث استثناء أو لا

Dim FileDB As New OpenFileDialog()

FileDB.Filter = "All files | *.* | Text files | *.txt"

FileDB.FilterIndex = 2
FileDB.InitialDirectory = "C:\Temp"
FileDB.AddExtension = True
FileDB.DefaultExt = "txt"

' Prevent dialog box from validating file
FileDB.CheckFileExists = False
FileDB.CheckPathExists = False

If (FileDB.ShowDialog() = DialogResult.OK) Then
Dim SourceFile As StreamReader

Try
SourceFile = New StreamReader(FileDB.FileName)
Catch Except As Exception
MsgBox("Error: " & Except.Message)
End Try

If (Not SourceFile Is Nothing) Then
Try
TextBox1.Text = SourceFile.ReadToEnd()
Catch Except As Exception
MsgBox("Error: " & Except.Message)
Finally
MsgBox("In finally statements")
SourceFile.Close()
End Try
End If
Else
MsgBox("User selected Cancel")
End If

وفي بعض الحالات قد تكون هناك أوقات لاتريد استكمال تنفيذ البلوك Try ... Catch عندها تستخدم العبارة Exit Try للخروج من البلوك حيث سينفذ بعدها أول سطر كود يلي End Try

Try

.... Some Code

If SomeCondition Then Exit Try

Catch Ex as Exception

Exit Try

إطلاق استثناءاتك الخاصة
هناك أوقات تحتاج فيها لتكوين استثناء خاص بك عندها ستحتاج بكل بساطة لإنشاء فئة Class ترث الفئة Exception - راجع دروس الوراثة في المنتدى - فعلى سبيل المثال يمكننا توليد استثناء باسم InvalidEMailException كما يلي

Public Class InvalidEMailException
Inherits System.Exception

Sub New(ByVal Message As String)
My****.New(Message)
End Sub
End Class

و بالطبع يمكنك انشاء طرق وخصائص في هذه الفئة حسب احتياجاتك كأي فئة أخرى وفي مثالنا المبسط هنا أنشأنا مشيد الفئة فقط وبعد إنشاء فئة الاستثناء الخاصة بنا يمكننا توليد الاستثناء باستخدام العبارة Throw

Throw New InvalidEMailException("Envalid Email Please Correct")

وفيما يلي مثال آخر

Public Class MyException
Inherits System.Exception

Sub New(ByVal Message As String)
My****.New(Message)
End Sub
End Class

Public Class Form1
Inherits System.Windows.Forms.Form

.....

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click

Try
MsgBox("About to generate custom exception")
Throw (New MyException("** Custom Message **"))
Catch Ex As MyException
MsgBox("Custom Exception thrown " & Ex.Message)
End Try

End Sub

......

End Class

البداية مع Visual Studio 2008 .

ال IDE المعتمد من مايكروسوفت لكتابة ال C# او ال VB.net هو ال Viusal Studio بنوعيه ، حيث نجد النوع Proffessional وهو غيرمجاني ، اما Express والذي يكون موجه للغة معينة فهو مجاني مثل Visual C# 2008 Express ، روابط التحميل موجودة في أول درس من دروس هذه الدورة .

بعد تشغيل البرنامج لأول مرة ، وحسب اللغة المستخدمة ستجد أول ما تجد خيارات انشاء مشروع أو Web Site جديد اضافة للتعديل على الموجودين ، من قائمة New اختر Project مثلاً :

http://vb4arab.com/vb/uploaded/3/01203691507.jpg

ابسط الأنواع هي Console Application وهي شاشة لكتابة الكود تحتوي مبدئياً على Class واحد باسم Main وال name space هو اسم المشروع الذي اخترته ... فقط . باقي الانواع سنتطرق لها من خلال عملنا ضمن الدورة ، سنستخدم Console لإنه ابسط الأنواع ونستطيع من خلاله فهم كامل بيئة .net 2008 .

على يمين الشاشة تجد ال Solution Explorer ، حيث يمكنك التنقل بين مكونات المشروع المختلفة ، تحت تبويب Refernces تجد المكونات المضافة إلى برنامجك ، تستطيع اضافة مكونات جديدة من خلال الضغط على Refernces بزر الماوس الأيمن واضغط Add .

http://vb4arab.com/vb/uploaded/3/01203691826.jpg

اسفل هذا التبويب يمكنك التبديل بين اسلوب العرض ، تستطيع اختيار عرض Class بحيث يتم عرض جميع ال Classes الموجودة في مشروعك والطرق والخصائص فيها :

http://vb4arab.com/vb/uploaded/3/01203692180.jpg

تحت تبويب Properties تجد خصائص المشروع ، لو قمت بالضغط عليه مرتين ستجد خصائص المشروع حيث يمكنك الخصائص الاساسية لمشروعك .

يتيح لك ال .net ايضاً Class Designer حيث يمكن رسم الكلاسات وتحديد العلاقات بينهما بصورة مرئية ومن ثم يتم تطبيقها مباشرة مع الروابط بينهما على المشروع مباشرة .

برنامجك الأول :

سنجرب اول برنامج بسيط لنا ، في ال function المسماه Main ضع الكود التالي :

Console.Write("Hello World");
Console.ReadKey();

او قم بازالة ال ; لو كنت تكتب VB.net . السطر الأول لكتابة جملة ، الثاني لقراءة اي حرف قبل اغلاق البرنامج ...

نكتفي بهذا القدر في درسنا هذا ، يمكنك استخدام الطرق التي ذكرها الاخ محمد سامر لتتبع تنفيذ البرنامج وتلاقي الأخطاء ، في درسنا القادم (الجزء الثاني) سنواصل مع باقي محتويات درس هذا الأسبوع .

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .