البمة باستخدام VISUAL BASIC.NET 2008 وسام الدين ممد
اتفاقية الستخدام هذا الكتاب وقف ل عز وجل يخضع لجميع قواعد الوقف السلمي وهذا يعني أنه يجوز لكل مسلم ومسلمه إعادة توزيعه في صورته اللكترونية أو إعادة طبعه بشرط عدم التربح منه أو تغيير شئ من محتوياته. وقد جعلته هكذا أبتغاء مرضاة ربي وآمل في أن يحط عني شئ من أوزاري فل تنسني من صالح دعائك.
تقديم هذا الكت يب في ال صل قد أ عد ليكون مدخل I للبرم جة العا مة با ستخدام Visual Basic لطلب دبلوم ن ظم المعلومات الجغراف ية في الكاديم ية العرب ية للعلوم والتكنولوج يا بالسكندرية. وقد مر بمراحل شتى حيث كتبته لول مرة ليغطي Visual Basic 6 ومن ثم أضطررت لعادة كتا بة أقس ام كثيرة م نه ع ند صدور Visual Basic.Net 2003 ثم تم أضا فة ب عد التعديلت لتوا فق ال صدارة.Visual Basic.Net 2005 وبالر غم من توق في عن التدر يس إل أن ني رأ يت أن أجدد هذا الكت يب ليكون متوافقا I مع ال صدار Visual Basic.NET 2008 خا صة مع المظا هر الجديدة الكثيرة ال تي أضف يت على ل غة البرم جة ال ساسية في هذا ال صدار و قد أضطرت ني هذه المظا هر الجديدة إلى إضا فة القس م ر قم ٥ لعرض تقن ية Windows Presentation Foundation WPF الجديدة وتعد يل القس ام رقم ٨ و ٩ و.١٠ وكنت قد أضفت جزء عن تقنية LINQ ثم قمت بحذفه بناء على نصيحة عدد من الزملء العاملين في الحقل حيث أن هذه التقنية غير مستقرة بعد. صمم هذا الكتاب ليكون منهجا I تعليميا I لطلب متخص صين في ن ظم المعلومات بص ورة عا مة ون ظم المعلومات الجغراف ية بص ورة خا صة و من ثم فإن الموضوعات ال تي يضم ها هي تلك الموضوعات ال ساسية الشائ عة ال تي يحتاج ها مبرمج ن ظم المعلومات ول يتطرق إلى الموضوعات المتقدمة مثل برمجة الشبكات أو برمجة الهواتف المحمولة مثل. و قد أض فت عدد من التدريبات إلى كل قس م من أقس ام هذا الكتاب بغرض أن يلم القارئ بالموضوع الذي يقد مه القس م من خلل الت طبيق. وتعمدت أن ل تعت مد هذه التدريبات على أي مواد خارجية إل في الحوال التي تتطلب هذا حتى ل يتشتت القارئ بين موضوع الكتاب وغيره من الموضوعات. ك ما تعمدت أن تكون مع ظم هذه التدريبات مبن يه على بعضها البعض حتى يدرك القارئ الطريقة التي تتطور بها التطبيقات. وفي الختام أتمنى أن يكون هذا الكتيب نافعا I لطلب والدراسين وأن يجد طريقة إلى مكتبة وعقل كل طالب أو باحث عربي في هذا الحقل.
جدول المحتويات أساسية 1... مفاهيم 1.1 مقدمة 1... 1.2 لغة واحدة ونسخ مختلفة 2... 1.3 تقنية NET FRAMEWORK. وكيف تعمل 3... 1.4 تشغيل 4...VISUAL BASIC.NET 2008 1.5 بيئة التطوير المتكاملة 5...INTEGRATED DEVELOPMENT ENVIRONMENT IDE في 9...VISUAL BASIC.NET المشروع الول 1.6 إنشاء المشروع في 9...VISUAL BASIC.NET 1.7 إنشاء واجهة الستخدام 11... 1.8 ضبط خصائص عناصر التحكم 13... 1.9 إضافة شفرة البرنامج 15... 1.10 اختبار وتشغيل البرنامج 16... 1.11 حفظ المشروع 16... 18...VISUAL BASIC.NET 2008 أساسيات 1.12 ما هي البرمجة 18... 1.12.1 ما هي لغة البرمجة 19... 1.12.2 طبيعة لغة 19...Visual Basic.NET 1.12.3 الخصائص والطرق والحداث 20... 1.12.4 الوظيفة 24...IntelliSense 1.12.4.1 سرد العضاء 24...List Members 1.12.4.2 معلومات البارامتر 25...Parameter Info 1.12.4.3 المعلومة السريعة 25...Quick Info 1.12.4.4 إكمال الكلمات 25...Complete Word 1.13 تمثيل البيانات باستخدام المتغيرات 26... 1.13.1 اختزان البيانات في المتغيرات 26... 1.13.1.1 العلن عن المتغيرات 26... 1.13.1.2 تخصيص المتغير 27... 1.13.1.3 العلن عن المتغيرات وتخصيص قيم افتراضية لها 27... 1.13.1.4 تدريب : العلن عن المتغيرات وتخصيص قيم لها 27... 1.13.2 أنواع البيانات 29... 1.13.2.1 أنواع البيانات الرقمية 29... 1.13.2.2 أنواع البيانات اللفظية 30... أنواع أخرى من البيانات 30... 1.13.3 البيانات النصية 30... 1.13.3.1 تدريب : دمج المتغيرات النصية 32... 1.13.4 المصفوفات 32...Arrays 1.13.4.1 تخصيص قيم للمصفوفة 33... 1.13.4.2 استرجاع القيم المختزنة في المصفوفة 34... 1.13.5 التحويل بين أنواع المتغيرات 34... 1.13.5.1 تحويل المتغيرات إلى متغيرات نصية 34... 1.13.5.2 التحويل بين المتغيرات الرقمية 34... 1.14 العمليات على المتغيرات 35... 1.14.1 العمليات الحسابية 35... 1
1.14.1.1 استخدام القيم المرتجعة من التعبيرات 35... 1.14.1.2 العاملت الحسابية 36... 1.14.1.3 تدريب : تنفيذ العمليات الحسابية 36... 1.14.2 العمليات المنطقية 37... 1.14.2.1 تدريب : استخدام عاملت المقارنة 38... 1.15 الجراءات 39...PROCEDURES 1.15.1 ما هو الجراء 39... 1.15.2 أنواع الجراءات 40... 1.15.3 إنشاء الجراء 41... 1.15.3.1 تدريب : إنشاء إجراء 42... 1.15.4 البارامترات 43... 1.15.4.1 تدريب : إنشاء وظيفة مصحوبة ببارامترات 43... 1.16 الحلقات 44... 1.16.1 حلقة 44...For Next 1.16.1.1 تدريب : استخدام الحلقة 45...For Next 1.16.2 حلقة Do-While و 46...Do Until 1.17 القرارات 46... 1.17.1 العبارة 47...If- Then 1.17.2 التوسعة 47...If-Then-Else 1.17.2.1 تدريب : مقارنة عددين 48... 1.17.3 العبارة 48...Select Case 1.17.4 التوسعة 49...Select Case Case Else 1.17.4.1 تدريب : الختيار من بين عدة قيم 50... 1.18 معالجة الخطاء 50... 1.18.1 الخطاء من النوع 51...Run Time 1.18.2 العبارة 51...Try Catch Finally 1.18.2.1 تدريب : استخدام 52...Try- Catch- Finally التشغيل 53... بناء واجهات 1.19 واجهة التشغيل 53...USER INTERFACE 1.19.1 بناء النماذج 53...Forms 1.19.1.1 تدريب : تغيير خصائص النموذج 54... 1.19.1.2 تدريب : إضافة عناصر التحكم إلى النموذج 55... 1.20 التفاعل مع المستخدم : استخدام المفاتيح 55... 1.20.1 استخدام المفاتيح 56... 1.20.1.1 تدريب : استخدام المفتاح 56... 1.21 استخدام النصوص 57... 1.21.1 عرض النصوص في عنصر التحكم 57...Label 1.21.2 تسلم النص عبر عنصر التحكم 57...TextBox 1.21.2.1 تدريب : استخدام عنصري التحكم Label و 58...TextBox 1.22 بناء عامل حدث 58...EVENT HANDLER 1.22.1 تدريب : معالجة حدث 59...MouseEnter 1.22.2 إضافة عامل حدث آخر 59... 1.22.2.1 تدريب : إضافة الحدث 60...MouseLeave 1.22.3 مشاركة عامل الحدث 60... 1.22.3.1 تدريب : المشاركة في عامل حدث 61... 1.23 استخدام مربعات التأشير ومفاتيح الراديو 61... 1.23.1 مربع التأشير 62...Check Box 1.23.1.1 تدريب : استخدام مربع التأشير 62... 1.23.2 مفتاح الراديو 63...Radio Button 2
1.23.2.1 تدريب : إضافة مفاتيح الراديو 63... 1.23.3 استخدام أكثر من مجموعة من مفاتيح الراديو 64... 1.23.3.1 تدريب : استخدام عنصر التحكم GroupBox كحاوية 65... 1.24 استخدام الصور 65... 1.24.1 عنصر التحكم 66...PictureBox 1.24.1.1 إضافة الصورة كمورد 66...Resource 1.24.1.2 تدريب : عرض الصورة باستخدام عنصر التحكم 67...PictureBox 1.24.2 استخدام الصورة في خلفية النموذج 68... 1.24.2.1 تدريب : استخدام الصورة في خلفية النموذج 68... 1.25 القوائم 69... 1.25.1 إضافة القوائم 69... 1.25.1.1 تدريب : إضافة القائمة إلى نموذج 69... 1.25.2 استخدام خاصية 70...Enabled 1.25.2.1 تدريب : استخدام الخاصية 70...Enabled 1.25.3 إضافة شريط قوائم قياسي 71... 1.25.3.1 تدريب : إضافة شريط قوائم قياسي 71... 1.25.4 القوائم المنسدلة 72...Pop-Up Menus 1.25.4.1 تدريب : عمل قائمة منسدلة وربطها بنموذج 73... 1.26 استخدام عنصر التحكم 74...TIMER 1.26.1.1 تدريب : استخدام المكون Timer في بناء تطبيق الساعة 75... 1.27 عناصر التحكم LISTBOC و 76...COMBOBOX 1.27.1 تدريب : إضافة عنصر Item إلى عنصر التحكم 78...ListBox 1.27.1.1 ملحظات حول تعليمات البرنامج 79... 1.27.1.2 الطريقة 80...Add 1.27.2 تدريب : تصميم حدث للستجابة على اختيار بند من القائمة 80... 1.27.2.1 ملحظات حول تعليمات البرنامج 82... 1.27.3 تدريب : تعيين ما إذا كان عنصر ما موجود في القائمة أو ل 83... 1.27.3.1 تعليق على تعليمات البرنامج 84... 1.27.4 حذف عنصر من قائمة 84... 1.28 استخدام عناصر التحكم MONTHCALENDAR و 85...DATETIMEPICKER 1.28.1 تدريب : استرجاع البيانات من MonthCalender وعرضها في 86...Label 1.28.2 تدريب : استرجاع عدة بيانات تاريخ 87... 1.28.3 شكل بيانات التاريخ 88... 1.28.4 تدريب : تعديل شكل بيانات التاريخ 89... 1.29 المكون 90...ERRORPROVIDER 1.29.1 تدريب : التحقق من المدخلت باستخدام 90...ErrorProvider 1.29.2 تعليق على تعليمات التدريب 91... 1.30 استخدام صناديق الحوار 91...DIALOG BOXES 1.30.1 تدريب : استخدام صندوق الحوار 92...FolderBrowserDialog 1.30.2 تدريب : استخدام صندوق الحوار 94...FontDialog 1.30.3 تدريب : استخدام صندوق الحوار 95...ColorDialog 1.31 استخدام عنصر تحكم أشرطة الدوات 96...TOOLSTRIP 1.31.1 تدريب : إضافة شريط الدوات 97... 1.31.2 إضافة شريط أدوات قياسي 98... 1.32 استخدام عنصر التحكم 99...TREEVIEW 1.32.1 تدريب : أنشاء متصفح لمواقع النترنت 99... تقنية 104...WINDOWS PRESENTATION FOUNDATION WPF 3
1.33 تصميم واجهة تطبيق باستخدام 104...WPF 1.33.1 تدريب : أنشاء تطبيق 106...WPF 1.33.2 تدريب : إضافة عناصر التحكم إلى نافذة 108...WPF. 1.34 عناصر تحكم WPF الشائعة 109... 1.34.1 تدريب : إضافة عنصر تحكم لتطبيق WPF وربطه بالتعليمات 109... 1.34.2 قائمة بعناصر تحكم 111...WPF 1.35 أنشاء معالج حدث لعناصر تحكم 111...WPF 1.35.1 تدريب : أنشاء معالج حدث لعنصر تحكم من النوع 111...Button 1.36 أنشاء تطبيق WPF للرسم 112... الخطاء 117... معالجة 1.37 البحث عن الخطاء 117... 1.37.1 تدريب : استخدام خاصية 118...Edit & Continue 1.38 أنواع الخطاء 119... 1.38.1 أخطاء التجميع 119...Compilation Errors 1.38.2 أخطاء التشغيل 120...Run-time Errors 1.38.3 الخطاء المنطقية 120...Logic Error 1.39 العثور على أخطاء التجميع وإصلحها 120... 1.39.1 تدريب : العثور على أخطاء التجميع وإصلحها 121... 1.40 العثور على أخطاء التشغيل وإصلحها 122... 1.40.1 تدريب : العثور على أخطاء التشغيل وإصلحها 123... 1.41 استخدام النافذة الوسيطة 124... INTERMEDIATE WINDOW 1.41.1 تدريب : اختبار التعليمات في النافذة الوسيطة 124... 1.42 كشف الخطاء المنطقية 125... 1.42.1 تدريب : اكتشاف خطأ منطقي 126... 1.42.2 تدريب : إضافة نقاط اليقاف إلى تعليمات البرنامج 127... 1.42.3 تدريب : علج الخطأ المنطقي 128... 1.43 التعليقات 128...COMMENTS البيانات 129... مقدمة إلى تطبيقات قواعد 1.44 قواعد البيانات 129...DATABASE 1.45 أنشاء قاعدة بيانات 130... 1.45.1 أنشاء قاعدة البيانات 130... 1.45.2 إضافة جدول إلى قاعدة البيانات 133... 1.45.3 إضافة المفتاح الساسي 135...Primary Key 1.45.4 إضافة البيانات إلى الجدول 136... 1.46 التصال بقاعدة البيانات 138... 1.47 عرض البيانات في واجهة رسومية 143... 1.48 تحديث البيانات 145... 1.49 عرض البيانات من جداول مترابطة 147... 1.49.1 تدريب : التصال بقاعدة البيانات 147...Northwind. 1.49.2 تدريب : عرض البيانات المترابطة 150... 152... استخدام الملفات 1.50 عرض الملفات المختزنة في مجلد 152... 1.50.1 تدريب التعرف على الملفات 153... 1.50.2 عرض الصور 155... 1.50.3 تحسين عمل البرنامج 156... 1.51 كتابة البيانات في ملف نصي 156... 4
1.52 قراءة البيانات من ملف نصي 157... 1.53 حذف ملف 159... الكائنات 161... أسس برمجة 1.54 ما هي الفئة CLASS 161... 1.54.1 ماذا بداخل الفئة 161... 1.55 أنشاء الفئة 163... 1.55.1 أنشاء الفئات في المشروع 163... 1.55.2 الوحدات النمطية للفئات 164... 1.56 إضافة الخصائص إلى الفئة 165... 1.56.1 الحقول وخصائص الجراءات 165... 1.56.2 الخصائص من النوع ReadOnly والنوع 168...WriteOnly 1.57 إضافة الطرق إلى الفئات 170... 1.57.1 الطرق الخاصة بالفئة 170... 1.57.2 مفهوم الحمل الزائد 172...Overloading 1.58 إضافة حدث للفئة 173... 1.58.1 العلن عن الحداث وإنشاءها 173... 1.58.2 تكوين معالج الحدث 174... 1.59 اختبار الفئات 175... 1.59.1 إنشاء كائن مثال على الفئة 175... 1.59.2 اختبار الفئة 177... 1.59.3 اختبار التحميل الزائد للفئات 178... 1.59.4 اختبار عامل الحدث 179... 1.60 الوراثة 180...INHERITANCE 1.60.1 الوراثة من فئة موجودة 181... 1.60.2 اختبار الفئة المشتقة 182... 1.60.3 تجاوز العضاء 184...Overriding Members 1.61 استخدام المجموعات في إدارة الكائنات المتعددة 186... 1.61.1 إنشاء المجموعة 186... 1.61.2 الحلقة 189...For Each Next التحكم 190... أسس برمجة عناصر 1.62 استخدام 190...USER CONTROL DESIGNER 1.62.1 إنشاء عنصر التحكم في 191...Visual Basic Express 1.62.2 إنشاء عنصر التحكم في 192...Visual Basic 2008 1.63 إضافة عناصر التحكم القياسية على عنصر التحكم المصمم 192... 1.64 إضافة التعليمات إلى عنصر التحكم المنشأ 193... 1.64.1 الحداث الخاصة بعنصر التحكم المنشأ 193... 1.64.2 خصائص عنصر التحكم 195... 1.64.3 القيم المسماة 197... 1.65 اختبار عنصر التحكم 200... 1.66 تحسين عنصر التحكم المنشئ 200... 1.66.1 تحسين مظهر عنصر التحكم 201... 1.66.2 الحدث 203...Validating الرسوم 206... برمجة 1.67 أظهار الرسوم 206... 1.67.1 أسس الرسم 206... 5
1.67.2 رسم خط 207... 1.68 رسم الشكال 208... 1.68.1 رسم الشكال البسيطة 208... 1.68.2 رسم الشكال المصمتة 209... 1.69 رسم النصوص فوق النموذج 210... 1.69.1 رسم النص 210... 1.69.2 المؤثرات على النصوص 211... 1.70 رسم الصور 211... جدول الشكال شكل :1-1 فكرة عمل 4...NET FRAMEWORK. شكل :2-1 واجهة استخدام MICROSOFT VISUAL STUDIO عند فتحها لول شكل :3-1 نافذة مرة 5... 6...SOLUTION EXPLORER شكل :4-1 صندوق الدوات 7... شكل :5-1 نافذة الخصائص 8... شكل :6-2 نافذة 10...NEW PROJECT شكل :7-2 النموذج بعد إضافة عناصر التحكم 12... شكل :8-2 شكل النموذج بعد ضبط عناصر شكل :9-2 نافذة التحكم 14... 16...SAVE PROJECT شكل :10-3 التعرف على الحداث من خلل نافذة كتابة شفرة شكل :11-3 حدث وخز شكل :12-3 سرد التعليمات 22... البالون 23... العضاء 24... شكل :13-3 معلومات البارامتر 25... شكل :14-3 المعلومة السريعة 25... شكل :15-3 إكمال الكلمات 25... شكل :16-4 نافذة 66...PROJECT DESIGNER. شكل :17-4 التبويب 67...RESOURCE. شكل :18-4 إضافة مورد شكل :19-4 تحرير خارجي 67... القوائم 70... شكل :20-4 إضافة شريط قوائم قياسي إلى النموذج 72... شكل :21-4 النموذج مضاف إلية شريط القوائم القياسي 72... شكل :22-4 المكون TIMER في TOOLBOX وعلى النموذج 76...FORM1 شكل :23-4 عنصر التحكم LISTBOX يعرض أكثر من بند في آن واحد 77... شكل :24-4 عنصر التحكم COMBOBOX يسمح للمستخدم أن يختار أو أن يحرر البند الذي شكل :25-4 إضافة عنصر التحكم شكل :26-4 التطبيق أثناء 78...LISTBOX التشغيل 79... شكل :27-4 إضافة عنصر التحم TEXTBOX إلى واجهة 6 يختاره 77... التطبيق 81...
شكل :28-4 آثر اختيار اللون الخضر من LISTBOX1 على خلفية 82...TEXTBOX1 شكل :29-4 أختار LISTBOX من CLASS NAME وأختر DOUBLE CLICK من شكل :30-4 البرنامج بعد تعديله أثناء التشغيل 84... شكل :31-4 حذف العنصر PINK من قائمة, LISTBOX إضافته شكل :32-4 واجهة 83...METHOD NAME. إلى 85...COMBOBOX. التطبيق 87... شكل :33-4 تبويب 92...DIALOGS شكل :34-4 التطبيق أثناء شكل :35-4 أضافة العمل 93... FONTDIALOG للتطبيق 95... شكل :36-4 استخدام الـ 96...COLORDIALOG. شكل :37-4 إضافة BUTTON إلى :38-4 إضافة شريط الدوات القياسي 99... شكل :39-4 فتح معالج تحرير الـ شكل :40-4 معالج تحرير الـ 97...TOOLSTRIP 100...NODES. 101...NODES. شكل :41-4 استخدام البرنامج في تصفح موقع شكل :42-5 محرر 103...VISUAL BASIC LANGUAGE. 105...XAML شكل :43-5 أنشاء تطبيق WPF جديد 107... شكل :44-5 ضبط الخاصية 108...HORIZONTALALIGNMENT شكل :45-5 أنقر 114...CHOOSE ITEMS شكل :46-5 نافذة 114...CHOOSE TOOLBOX ITEMS شكل :47-5 أيقونة 115...INKCANVAS شكل :48-5 التطبيق INK PAD أثناء التشغيل 116... شكل :49-6 نافذة الستثناء 119... شكل :50-6 نافذة 121...ERROR LIST شكل :51-6 النافذة الوسيطة 125... شكل :52-7 نافذة 131...ADD NEW ITEM شكل :53-7 نافذة 132...DATA SOURCE CONFIGURATION WIZARD شكل :54-7 قاعدة البيانات FIRSTDB في نافذة 133...SOLUTION EXPLORER. شكل :55-7 نافذة 134...SERVER EXPLORER شكل :56-7 نافذة 135...NEW TABLE. شكل :57-7 نافذة 136...EDIT TABLE شكل :58-7 نافذة عرض وإدخال شكل :59-7 البيانات شكل :60-7 نافذة البيانات 137... المدخلة للجدول 137... 139...DATA SOURCES شكل :61-7 نافذة المعالج 139...DATA SOURCE CONFIGURATION. 7
شكل :62-7 النافذة 140...CHOOSE DATA SOURCE. شكل :63-7 النافذة 140...ADD CONNECTION شكل :64-7 اختيار ملف قاعدة البيانات 141... شكل :65-7 رسالة عن إمكانية نقل البيانات إلى شكل :66-7 حفظ المشروع 141... الوصلة 142... شكل :67-7 الصفحة 143...CHOOSE YOUR DATABASE OBJECTS شكل :68-7 عناصر التحكم التي أضيفت للنموذج 144...FORM1. شكل :69-7 البرنامج عند التشغيل 145... شكل :70-7 تعديل واجهة التطبيق 146... شكل :71-7 نافذة 148...DATA SOURCE CONFIGURATION WIZARD شكل :72-7 النافذة 149...ADD CONNECTION شكل :73-8 واجهة التطبيق 154... شكل 74-8 ك التطبيق أثناء التنفيذ 155... شكل :75-9 مشروع CLASS LIBRARY في محرر شكل :76-9 النافذة التعليمات 165... 176...ADD REFERENCE شكل :77-10 النافذة 195...USER CONTROL TEST CONTAINER شكل :78-10 الخصائص الجديدة تظهر في نهاية نافذة شكل :79-11 أختار 212...ADD EXISTING FILE شكل :80-11 الصورة كما ظهرت 8 197...PROPERTIES. التطبيق 213...
مفاهيم أساسية 1.1 مقدمة في عام ١٩٦٣ أبت كر جون كيمي ني John Kemeny وتوماس كور تز Thomas Kurtz ل غة Basic و هي الكل مة ال تي تختص ر العبارة " Beginners All Purposes "Symbolic Instruction Code أو "شفرة التعليمات الرمز ية متعددة الغراض للمبتدئ ين". وك ما هو وا ضح من تس ميتها فإن ها صممت كي تح قق احتياجات البرم جة لل مبرمجين غ ير المحترف ين من الهواة والطلب والباحث ين غ ير المتخص صين في علوم الحاسوب. وقد لقت لغة Basic نجاحا I واسعا I على النطاق الذي صممت من أجله. وفي مايو ١٩٩١ طرحت شركة Microsoft نسخة مطورة من Basic منحتها اسم Visual Basic حيث استخدمت اللفظة المضافة Visual للتعبير عن الوظيفة الجديدة التي أضي فت لهذه الل غة كأول ل غة مص ممة لتطو ير ت طبيقات ذات واجهات ا ستخدام ر سومية Graphical User Interface تع مل على نظام التشغ يل Operating System الثوري الذي كانت تروج Microsoft له منذ عام ١٩٨٥ وهو.Microsoft Windows وم نذ ذلك التار يخ لع بت Visual Basic دور الل غة الولى لتطو ير ت طبيقات Microsoft Windows وقد طرحت Microsoft منها تسعة إصدارات ومنذ الصدارة السابعة التي أطلق عليها اسم Visual Basic 2003 أعيد تصميم Visual Basic بحيث أ صبحت تع مل وفقا I للتقن ية الجديدة لت طبيقات Microsoft المس ماة NET Framework. و من ثم حملت ال سم الجد يد Visual Basic.NET ح يث أ صبحت أبس ط وأك ثر فاعل ية وقابلية في تطوير التطبيقات التي تتماشى مع التجاهات المعاصرة في الحوسبة مثل خدمات الوب وتطبيقات الحواسيب الكفية. وتعد الصدارة الحدث اليوم هي Visual Basic.NET 2008 التي طرحت في أول يناير.٢٠٠٨ في هذا القس م سنتعرض لعدد من المفاه يم ال ساسية اللز مة للتعرف على ما هي Visual Basic.NET 2008 وكيف تعمل. 1
1.2 لغة واحدة ونسخ مختلفة عند ما تم تص ميم Visual Basic للمرة الولى را عى مص مميها أن تكون سهلة ال ستخدام و في ن فس الو قت قادرة على ال ستجابة لمتطلبات مختلف ال مبرمجين المبتدئ ين منهم والمحترفين على قدر سواء. وهذا ما جعل إمكانات Visual Basic تزداد إصداره تلو أخرى وهذا ما ن تج ع نه و ضع أ صبح ف يه كث ير من ال مبرمجين ذات الحاجات المحدودة يحتاجون أن يتعلمون تقنيات لن يحتاجونها أبدا I في تطبيقاتهم كما كان عليهم أن يدفعوا ثمن هذه التقنيات عندما يشترون أدوات تطوير.Visual Basic ولتفادي هذا الو ضع قا مت Microsoft بطرح عدة نس خ من Visual Basic تتوا فق مع حاجات ال مبرمجين المختل فة. و قد ضم ال صدار Visual Basic.NET 2008 ثلثة نسخ رئيسية هي : النسخة المخففة Express Edition والنسخة القياسية Standard Edition والنسخة الحترافية.Professional Edition النس خة المخف فة Visual Basic 2008 Express هي نس خة تض م التقنيات ال ساسية ال تي يحتاج ها ال مبرمجين المبتدئ ين والهواة لتطو ير ت طبيقات قائ مة بذات ها Stand Alone Applications تع مل ت حت نظام التشغ يل Microsoft Windows و هي مصممة لكي تخدم الغراض التعليمية غير الربحية ومن ثم فإن الحصول عليها يمكن عن طريق تنزيلها من موقع Microsoft على النترنت حيث يتم تنزيلها منفردة بدون أي من تقنيات Visual Studio.NET 2008 الخرى ومجانا.I النسخة Visual Basic.NET 2008 Standard Edition هي نسخة مخصصة يم كن ا ستخدامها لتطو ير ت طبيقات مختل فة سواء تلك القائ مة بذات ها أو ت طبيقات الوب Web Applications أو ت طبيقات الخادم / العم يل Server/Client Applications أو ت طبيقات النظام Windows CE المخص ص للحوا سيب الكفية.Windows CE Applications 1 ويم كن الحص ول على هذه النس خة منفردة أو ض من مجمو عة تقنيات Visual Studion.NET 2008 مقابل دفع ثمنها. النس خة الحتراف ية Visual Basic.NET 2008 Professional Edition هي نسخة يمكن استخدامها لتطوير جميع أنواع تطبيقات الحواسيب والوب وتتميز هذه النسخة بصورة خاصة أنه يمكن استخدامها في تطوير التطبيقات التي يعمل عليها أكثر من مبرمج 1 والهوا تف النقالة Mobile Phones وأنظ مة المل حة Navigation Systems بالس يارات والمركبات البحر ية والجو ية وأجهزة نظام الموقع العالمي.Global Positioning System GPS 2
في آن وا حد و هو ما ل توفره النس خة القيا سية وأيضا I يم كن الحص ول على هذه النس خة منفردة أو ضمن مجموعة تقنيات Visual Studion.NET 2008 مقابل دفع ثمنها. وق بل النتهاء من هذا القس م ل بد أن نقدم نبذة عن.Visual Studio.NET 2008 هذا الل فظ Visual Basic.NET 2008 تقص د به Microsoft حز مة من أدوات تطو ير مختلف الت طبيقات تض م ثل ثة لغات برم جة بص ورة أ ساسية هي Visual Basic.NET 2008 و Visual C++ 2008 و Visual C#.NET 2008 تعمل هذه اللغات الثلثة من خلل بيئ ية تطو ير متكاملة Integrated Development Environment IDE بح يث يس هل على ال مبرمج أن يقوم بتطو ير حلول متعددة اللغات أ ضف على ذلك إلى أن هذه الحزمة تعتمد على تقنية NET Framework. والتي توفر مجموعة من التقنيات الساسية لتطوير التطبيقات المختلفة وتطبيقات الـ ASP وتطبيقات خدمات الوب بصورة خاصة. 1.3 تقنية NET Framework. وكيف تعمل في ينا ير ٢٠٠٢ طر حت Microsoft لول مرة تقن ية NET Framework. باعتبارها الحل المثل لمشاكل تطوير التطبيقات في بيئة Microsoft Windows باستخدام حزمة تطوير التطبيقات الجديدة يومئذ Visual Basic.NET التي طرحت للتجربة في عام.٢٠٠١ شكل 1-1 يبين فكرة ع مل تقن ية NET Framework. ح يث يقوم ال مبرمج بكتا بة برنامجه بأي من لغات الحزمة Visual Studio.NET وعندما يقوم بتجميعها فإنه وعلى ع كس اللغات التقليد ية ل يقوم المج مع بإنتاج ملف تشغيلي له المتداد * exe. لك نه يقوم بإنتاج نوع من الملفات يطلق عل يه أ سم ملفات Common Intermediate Language CIL أي ملفات الل غة الو سيطة العا مة و هي ملفات محايدة ل تتأ ثر بل غة البرم جة ال تي ك تب ب ها الت طبيق و من ه نا و صفت بأن ها محايدة ول يم كن أن ي تم تنفيذ ها مباشرة بع كس الملفات التشغيلية Executable Files التي يتم تشغيلها مباشرة بل تحتاج لتنفيذها برنامج آ خر يم ثل أ حد مكونات NET Framework. ال ساسية و هو Common Language Runtime CLR أو من فذ الل غة العا مة و هو برنا مج يل عب دور حا سوب افترا ضي يم كن تنف يذ البرنا مج المحفوظ في ملفات CIL بوا سطته إل أ نه في الوا قع يقوم بإنشاء نس خة من البرنامج بلغة اللة تناسب الحاسوب الحقيقي ومن ثم يقوم بتشغيلها على الحاسوب الحقيقي.1 1 إذا كنت تشتم رائحة Java فأنت على حق لقد حاولت Microsoft مضاهاة تقنية عمل تطبيقات.Java 3
ووفقا I لهذا الس يناريو فإن تطو ير الت طبيق يجرى بص ورة مس تقلة عن نظام التشغ يل والحاسوب حيث يعتمد كليا I على الـ Common Language Runtime والتي تلعب دور الوسيط بين الملفات المجمعة CIL والحاسوب. وقد وعدت Microsoft أنه قبل انتهاء عام ٢٠٠٣ سوف تكون هناك نسخة خاصة من NET Framework. لكل نظام تشغيل متعارف عل يه ب ما ف يه Linux و Unix وبذلك يم كن ا ستخدام ل غة Visual Basic أو غير ها من لغات Visual Studio لتطوير تطبيقات تعمل على جميع أنظمة التشغيل.1 شكل :1-1 فكرة عمل NET Framework. 1.4 تشغيل Visual Basic.NET 2008 لتشغيل Visual Basic.NET 2008 يمكن أن نستخدم أحد طريقين : من القائ مة Start أختار All Programs و من هذه القائ مة أختار الحز مة Visual Basic.NET 2008 ثم أختار منها.Visual Basic.NET 2008 1 حتى اليوم فإن نسخة NET Framework. المتاحة تعمل تحت نظام التشغيل Microsoft Windows ول توجد نسخ منها لنظمة التشغيل الخرى. 4
بالنقر فوق أيقونة Visual Basic.NET 2008 الموجودة فوق سطح المكتب. في كل الحالت ين ينف تح Visual Basic.NET 2008 وتظ هر واج هة ا ستخدامه المبينة في شكل.1-2 شكل :2-1 واجهة استخدام Microsoft Visual Studio عند فتحها لول مرة في حالة ما إذا كا نت هذه هي المرة الولى ال تي تقوم في ها بتشغ يل Microsoft Visual Studio سوف تظ هر نافذة تس أل المس تخدم عن ش كل واج هة التطو ير المطلوب العمل معها في هذه الحالة سوف يختار المستخدم بالطبع واجهة.Visual Basic 1.5 بيئة التطو ير المتكاملة Development Integrated Environment IDE بيئة التطو ير المتكاملة Integrated Development Environment IDE هو ال سم الذي يس تخدمه مطوري Visual Studio لو صف بيئة عمل هم. و في البدا ية أ حب أن أقول لك أ نه بالر غم من أن Visual Studio.NET 2008 يس تخدم بيئة تطو ير متكاملة موحدة لجميع لغات البرمجة التي يضمها إل أنه يفضل أن يتم تخصيص مظهر بيئة التطوير المتكاملة ب ما يتنا سب مع Visual Basic و هو ما يم كن أن نقوم به ع ند تشغ يل Visual Studio.NET 2008 للمرة الولى حيث تظهر رسالة تسأل عن الشكل الذي ير غب أن تكون عليه بيئة التطوير المتكاملة فأحرص أن تكون.Visual Basic 5
تتكون بيئة التطوير المتكاملة من عدة عناصر هي : صفحة البدء :Start Page هي صفحة وب يتم فتحها في متصفح مبسط داخل تبو يب يح مل ال سم Start Page وتحتوي هذه الص فحة على أحدث الخبار عن Microsoft Visual Studio.NET وكافة مكوناته وفي حال عدم اتصال الحاسوب المثبت عليه Visual Studio بالنترنت تكون هذه الصفحة غير نشطة. نافذة :Solution Explorer وتقع في الجانب اليمن من بيئة التطوير المتكاملة أن ظر شكل 1-3 ح يث يم كن لل مبرمج أن يطلع على مكونات ال حل الذي يقوم على تطويره من مشروعات مختلفة وما تحتويه هذه المشروعات من مكونات كما يمكنه أن يدير جميع هذه العناصر من خلل هذه النافذة. شكل :3-1 نافذة Solution Explorer صندوق الدوات :Toolbox و هو شر يط يو جد في الجا نب اليس ر من بيئة التطو ير المتكاملة أن ظر شكل 1-4 ويض م جم يع عنا صر التح كم Controls ال تي تلزم المبرمج لبناء واجهات تطبيقه مصنفه في تبويبات حيث يشمل كل تبويب مجموعة من أدوات التح كم ال تي تقوم بوظائف متقار بة مثل I التبو يب Menus & Toolbars يحتوي على عنا صر التح كم اللز مة لنشاء القوائم وأشر طة الدوات و ما شا به. هناك تبويبان ل يلتزمان بج مع عنا صر التح كم المتقار بة الوظي فة وه ما التبو يب All 6
Windows Forms ويض م جم يع عنا صر التح كم اللز مة لبناء واجهات الت طبيقات والتبو يب Common Controls والي يض م عنا صر التح كم الك ثر ا ستخداما.I ويم كن من خلل اختيار أي من عنا صر التح كم معر فة وظي فة هذه العنص ر من خلل نافذة ملحظة الداة Tool Tip التي سوف تظهر. شكل :4-1 صندوق الدوات نافذة الخص ائص :Properties Window و هي موجودة في الر كن الي من ت حت نافذة ا ستكشاف ال حل Solution Explorer أن ظر شكل 1-5 و هي الداة المستخدمة لتغيير خصائص عناصر التحكم التي تتكون منها واجهة التطبيقات بصورة سهلة حيث يتم اختيار عنصر التحكم المطلوب ضبط خصائصه ثم اختيار الخاصية من هذه النافذة واختيار أو تخصيص قيمة ملئمة لها. 7
شكل :5-1 نافذة الخصائص 8
المشروع الول في Visual Basic.NET إن الطريقة المثلى لتعلم أي لغة برمجة هو الشروع فورا I في كتابة برنامج بهذه اللغة. في التدريب التالي سنقوم بكتابة برنامج بسيط الغرض منه تص فح صفحات الوب. إذا حدث ولم تف هم أي من الجراءات المذكورة في هذا التمر ين فل تقلق فالمفاه يم المقد مة ه نا سوف يتم تناولها في صورة أكثر تفصيل I في جزء آخر من هذا الكتاب. 1.6 إنشاء المشروع في Visual Basic.NET الخطوة الولى في بناء أي مشروع Visual Basic هو ف تح Visual Studio وإنشاء مشروع. وهذه الخطوة ستتكرر في كل مرة تقوم في ها بالشروع في إنشاء ت طبيق جديد. لنشاء مشروع جديد أتبع الجراءات التالية : من قائ مة Start أختار Microsoft Visual Studio 2008 ومن ها Microsoft Visual Studio 2008 لتظهر شاشة الترحيب ثم تظهر بيئة التطوير المتكاملة. من قائ مة File أختار.New Project تنف تح نافذة معنو نة ب ـ New Project أنظر شكل.2-6 9
شكل :6-2 نافذة New Project لحظ أن هناك قائمة موجودة في الجانب اليمن من هذه النافذة تحتوي على NET. Framework يمك نك من خلل هذه القائ مة اختيار ال صدارة المنا سبة ل ـ NET. Framework وبص ورة عا مة إذا ك نت تقوم بتطو ير ت طبيق ليع مل ت حت نظام التشغ يل Microsoft Windows Vista فل م فر من اختيار NET Framework 3.5. أ ما إذا كنت تقوم بتطوير تطبيق لن يعمل تحت هذا النظام فيمكنك اختيار أي من الصدارات الثلثة. أختار Windows Application ثم أنقر.OK يظهر نموذج Form جديد في بيئة التطو ير المتكاملة ك ما تظ هر الملفات الضرور ية لمشرو عك في نافذة.Solution Explorer إذا كان هذا المشروع هو أول مشروع من عائلة مشروعات Windows Application فسوف يحمل السم.WindowsApplication1 الجراءات الس ابقة كان الغرض من ها إنشاء مشروع للبرنا مج الذي نر يد تطويره. المشروع في Visual Basic هو المكان الذي يتم اختزان وتنظيم مكونات البرنامج فيه. عند إنشاء المشروع فإ نه ي تم إنشاءه في ذاكرة الحا سوب وعند ما تر يد إنهاء بيئة التطو ير المتكاملة فإن بيئة التطوير المتكاملة سوف تعلمك بأن المشروع غير محفوظ على الحاسوب ومن ثم فإن عليك أن تختار ما بين حفظه Save أو عدم حفظه.Discard عند فتح النافذة المعنونة New Project أنظر شكل - 2-6 فإنك ستجد مجموعة من المشروعات المختل فة يمك نك النتقاء من بين ها. المشروع الذي قم نا باختياره والمس مى 10
Windows Application هو واحد من عائلة تطبيقات Windows المعتادة التي يمكنك استدعاءها من قائمة Start مثل Microsoft Word أو.Internet Explorer ع ند إنشاء مشروع ي تم عرض نافذة تحتوي نموذج فارغ في بيئة التطو ير المتكاملة يطلق علي ها نافذة مص مم النموذج.Form Designer هذا النموذج الفارغ في مص مم النموذج يمثل النافذة التي سوف يتم عرضها في البرنامج عند تنفيذه. هناك كثير من البرامج يمكنها عرض أكثر من نافذة في نفس الوقت لذلك فإن المشروع يمكنه أن يحتوي على أكثر من نموذج. 1.7 إنشاء واجهة الستخدام حان و قت إنشاء واج هة برنا مج متص فح الوب. سوف تقوم ببناء واج هة ا ستخدام برنامج باستخدام Microsoft Visual Studio 2008 وذلك بإضافة عناصر التحكم من صندوق الدوات Toolbox إلى النموذج. صندوق الدوات Toolbox يقع في الجانب اليسر من واجهة Visual Studio ويظهر في صورة لوحة Panel تظهر بالنقر فوقها وتختفي بالنقر فوق أي شئ غيرها في الواجهة وتتكون هذه اللوحة من عدد من التبويبات Tabs مثل Data و Components و.All Windows Forms بداخل كل تبويب مجموعة من أدوات التحكم التي يمكن إضافتها إلى تطبيقك. فمثل I التبويب المسمى All Windows Forms يحتوي على عناصر التحكم TextBox و Button و CheckBox التي تمثل عناصر تحكم يمكن إضافتها إلى التطبيق بسحبها وإلقاءها Drag and Drop على النموذج. لضافة عناصر التحكم إلى النموذج أتبع الجراءات التالية :.1 أنقر فوق لوحة Toolbox لتظهر هذه اللوحة..2 أن قر تبو يب All Windows Forms ثم أختار عنص ر التح كم Panel ثم ا سحب وألقي هذا العنصر في الركن العلى اليسر من النموذج..3 من نفس التبويب أسحب عنصر التحكم Button ثم ألقيه فوق عنصر التحكم Panel الذي سبق أن قمت بإلقائه فوق النموذج. 11
.4 من نفس التبويب اسحب عنصر التحكم TextBox ثم قم بإلقائه فوق Panel الموجود فوق الـ Form في جانبه العلى..5 وأخيرا A من ن فس التبو يب أخ تر WebBrowser وض عه في الجا نب ال سفل لل ـ.Panel من المفترض أن تحصل على شكل مشابه للموضح في شكل :7-2 النموذج بعد إضافة عناصر التحكم الن أنت قد أضفت عناصر التحكم إلى النموذج. عناصر التحكم تحتوي على شفرة Code يعرف مظ هر ومهام العنص ر. فمثل I العنص ر Button عادة مع ظم واجهات التطبيقات تحتوي مفتاح OK أو Exit وفي الماضي عند تصميم مثل هذا المفتاح كان المر يستلزم كتابة شفرة حول كيف سيبدو المفتاح وكيف سيتغير مظهرة بالنقر عليه وهكذا وهذه مسألة صعبة ومضيعة للوقت لكن باستخدام Visual Basic فإن العنصر Button يحتوي على الشفرة الساسية التي تضبط هيئته ليوفر بذلك جانب ثمين من الوقت. ك ما ترى فإن Toolbox يحتوي عدد كبير من عنا صر التح كم ول كل عنص ر من هذه العنا صر وظي فة واحدة. العنص ر Panel مثل I يم كن أن يس تخدم كحاو ية لغيره من العناصر. بينما يستخدم العنصر Button للقيام بتنفيذ إجراءات محددة عندما يقوم المستخدم النهائي للتطبيق بالنقر عليه. أما عنصر التحكم TextBox فيستخدم لدخال البيانات النصية من لوحة المفاتيح وإظهارها فوق شاشة الحاسوب. وأخيرا I عنصر التحكم WebBrowser يقدم خصائص تصفح الوب مماثلة لتلك التي يقدمها.Internet Explorer 12
1.8 ضبط خصائص عناصر التحكم قمنا فيما سبق بإنشاء واجهة التطبيق عن طريق إضافة عناصر التحكم إلى النموذج. ح تى هذه اللح ظة فإن النموذج ل يظ هر بص ورة تنا سب ما هو معرف من الت طبيقات ك ما ل تقوم عناصر واجهته بأي من الوظائف. فيما يلي نعتني بالجزء الول من المشكل وهو مظهر التطبيق حيث سوف نقوم بضبط الطريقة التي يبدو عليها البرنامج ليظهر جيدا I وذلك بضبط خصائص عناصر التحكم. لضبط خصائص عناصر التحكم نتبع الجراءات التالية :.6 أخ تر عنص ر التح كم Panel من فوق النموذج في نافذة Form Designer بالن قر فوقه أو بالنقر فوق أي من حوافه. تعرض نافذة Properties في القسم السفل اليمن من بيئة التطوير المتكاملة خصائص عنصر التحكم.Panel.7 في نافذة Properties أخ تر خا صية Dock ثم ان قر الس هم الموجود على يم ين الخاصية تظهر نافذة صغيرة تحتوي على عدد من الصناديق..8 ان قر فوق الص ندوق العلى لتض بط خا صية Dock على أعلى ونتي جة لهذا يتمدد عنصر التحكم Panel ليشغل القسم العلوي من النموذج..9 قم باختيار عنصر التحكم WebBrowser من فوق النموذج. في نافذة Properties أختر خاصية Dock ثم اضبطها لتصبح ) Fill الصندوق الوسط(..10 أخ تر عنص ر التح كم Button و من نافذة Properties أخ تر خا صية Text ثم ا مح كلمة Button1 من أمامها وأكتب عوضا A عنها.!Go.11 قم بتغيير وضع العناصر وتغيير حجمها بالنقر عليها وجرها من مكانها أو النقر على حوافها وسحب هذه الحواف حتى تحصل على الشكل التالي للواجهة. 13
شكل :8-2 شكل النموذج بعد ضبط عناصر التحكم يم كن التح كم في ش كل عنا صر التح كم عن طر يق تغي ير ض بط خص ائصها. فمثل تغي ير قي مة الخا صية Text لعنص ر التح كم Button أدى إلى تغ ير العنوان المكتوب فوق المفتاح. وتتغ ير ق يم خص ائص عنا صر التح كم بص ور ش تى فمن ها ما يتغ ير رقميا I ومن ها يحصل على قسمة نصية من قائمة محددة ومنها ما له قيمتين False و.True يمكن تغيير الخصائص من النافذة Properties وعندئذ يتغير شكل عنصر التحكم لملئمة القيمة الجديدة لخصائصه كما يمكن تغيير الخصائص أثناء التصميم كتغيير الموقع أو تغي ير الح جم و في هذه الحالة تتغ ير قي مة الخص ائص المقابلة في النافذة Properties لتتوافق مع هذه التغيرات. نظرا I لن عمل ية ض بط الخص ائص ستتكرر كثيرا I في ما يلي فس وف نس تخدم طري قة مبسطة لشرح خصائص عناصر التحكم المختلفة حيث سوف نستخدم جدول مكون من ثلثة أعمدة العمود الول نذكر فيه اسم عنصر التحكم والعمود الثاني سنذكر فيه الخاصية وفي العمود الثالث وفي مقابل الخاصية نضع قيمتها. والجدول التالي يبين ضبط خصائص النموذج Form1 الذي قمنا به من قبل : عنصر التحكم Panel WebBrowser Button 14 الخاصية Dock Dock Test القيمة Top Fill!Go
1.9 إضافة شفرة البرنامج فيما سبق قمنا بتعديل مظهر عناصر التحكم لنحص ل على مظهر ملئم للتطبيقات فيما يلي نعني بما يجعل هذا التطبيق له القدرة على العمل والستجابة لطلبات مستخدميه. قم بإضافة شفرة للبرنامج بالطريقة التالية :.12 قم بالنقر مرتين فوق المفتاح Button المسمى!Go فوق النموذج. تنفتح نافذة جديدة معنونة Code Editor في تبويب جديد..13 قم بكتابة الشفرة التالية في نافذة.Code Editor ) WebBrowser1.Navigate(TextBox1.Text.14 هذه الشفرة سوف تعمل فقط عند تنفيذ البرنامج. هل لحظت أن نافذة Code Editor عندما ظهرت كانت تحتوي على الشفرة التالية : Private Sub Button1_Click(ByVal sender As System.Object, ByValue As System.EventArgs) Handles Button1.Click End Sub هذه الشفرة يطلق علي ها إجراء جزئي.Sub Procedure أي شفرة بدا خل هذا الجراء الجزئي )أي ب ين العبارات Sub و (End Sub سوف ي تم تنفيذ ها في كل مرة ي تم النقر على المفتاح فيها. الشفرة التي قمت بكتابتها (WebBrowser1.Navigate(TextBox1.Text تف يد البرنا مج أن يس تخدم الطري قة method المس ماة Navigate الخا صة بعنص ر التح كم ) WebBrowser و هو المس مى ه نا (WebBrowser1 مس تخدم القي مة النص ية المرتج عة من عنص ر التح كم TextBox1 المشار إلي ها ب ـ TextBox1.Text ح تى يقوم بتحم يل الص فحة ال تي ك تب المس تخدم عنوان ها في عنص ر التح كم TextBox في عنص ر التحكم عند النقر على المفتاح.!Go 15
1.10 اختبار وتشغيل البرنامج الن وقد أنهينا البرنامج قد حان الوقت لختباره وتنفيذه. في حالة التطبيقات لضخمة والمعقدة قد يكون اختبار الت طبيق طويل I ومعقدا I و هو ال مر الذي سوف نناقش ه في مو ضع آخر. أما في حالة البرنامج البسيط الذي قمنا بتطويره كل ما نحتاجه أن نقوم بتشغيله فقط. لتشغيل البرنامج قم بالجراءات التالية :.15 قم بتوصيل الحاسوب إلى النترنت..16 من القائمة Debug أختر Start Debugging ليبدأ تشغيل البرنامج..17 قم بكتا بة عنوان أي من موا قع الوب في صندوق النص وص في البرنا مج ولي كن www.google.com ثم أنقر المفتاح.!Go تظهر صفحة الموقع في عنصر التحكم.WebBrowser.18 لنهاء تشغيل البرنامج أختار Stop Debugging من القائمة.Debug في مع ظم الت طبيقات ال تي تقوم بتطوير ها سوف تقوم باختبار الت طبيق أثناء تطويره العد يد من المرات ف في كل مرة سوف تض يف في ها عنص ر تح كم أو تض يف شفرة سوف ترغب أن تعلم ما إذا كان التطبيق يعمل على الوجه المطلوب أم ل. هذه العملية يطلق عليها أسم الـ Debugging وسوف نناقشها لحقا.I 1.11 حفظ المشروع الن أنت قد أنشأت تطبيقك الول. لنقوم بحفظه أتبع الخطوات التالية :.19 من القائمة File أختار Save All لتظهر النافذة المبينة في شكل.2-9 شكل :9-2 نافذة Save Project 16
في الخانة Name يمكنك تعديل اسم البرنامج. من الخانة Location أكتب عنوان المجلد الذي تريد أن يضم مشروعك. في الخانة Solution Name قم بكتابة أو تعديل اسم الحل. في النهاية أنقر فوق المفتاح.Save يجب أن نتوقف قليل I لنعلق على موضوعين. الموضوع الول في هذا النافذة يو جد خا نة لل سم Name وخا نة ل سم ال حل Solution Name فما الفارق بينهما السم هو السم الذي سوف يظهر به التطبيق عند أضاف ته لمجو عة البرا مج خا صتك ال تي يدير ها Microsoft Windows أو بص ورة أك ثر بساطة هو اسم تطبيقك كما سوف يظهر في القائمة.All Programs بينما اسم الحل فهو ا سم الملف الذي سوف يس تخدم في إنشاء ملف الت طبيق أثناء عمل ية تطو ير الت طبيق في Visual Basic.NET وهو ملف سوف يكون له المتداد *.sln. الموضوع الثا ني يتعلق بالمكان الذي سوف ي تم ح فظ المشروع عل يه أثناء تطويره. فالمشروع قبل عملية الحفظ أين كانت ملفاته في الواقع كانت هذه الملفات موجودة في مجلد خاص بعنوان.Visual Studio 2008 لكن عند حفظ المشروع فإنه يمكنك تخصيص مجلد مخصوص لحفظ هذا المشروع وهو المجلد الذي سوف تحدد مساره في الخانة.Location 17
أساسيات Visual Basic.NET 2008 يع تبر Microsoft Visual Basic 2008 بمختلف إ صدارته الطري قة ال سرع وال سهل لتطو ير الت طبيقات في بيئة تشغ يل.Microsoft Windows وح تى هؤلء المبرمجين المبتدئين فإن Visual Basic يمدهم بمجموعة كاملة من الدوات التي تيسر أي من عمليات تطوير التطبيقات. ولكن ما هو Visual Basic إن الل فظ Visual يش ير إلى الطري قة ال تي يقوم ب ها ال مبرمج بتطو ير واجهات ال ستخدام الر سومية (Graphical User Interface (GUI لت طبيقاته. أ ما الل فظ Basic ف هو يش ير إلى الحرف الولى من العبارة Beginners App-Purpose Symbolic Instruction Code بمع ني شفرة التعليمات الرمز ية لمختلف أغراض المبتدئ ين ل غة البرم جة ال تي أ ستخدمها أ كبر عدد من مبرمجي الحا سوب م نذ بدا ية الحا سوب. با ستخدام Visual Basic يمكنك تطوير العديد من التطبيقات النافعة بأقل قدر من التعقيد. في هذا القسم نتتبع معا I أهم عناصر لغة برمجة.Visual Basic 2008 1.12 ما هي البرمجة رب ما كان من المس تحسن ق بل أن نمض ي في تعلم ل غة برم جة Visual Basic أن نتوقف قليل I لنفهم ما هي لغة البرمجة Programming Language وكيف تعمل. أي أن علينا أن نعلم كيفية البرمجة من الجانب النظري. الحاسوب في حد ذاته ليس ذكيا I بالمرة. الحا سوب في حد ذا ته مجرد حز مة ضخ مة من المكونات اللكترون ية ال تي تمرر التيار الكهر بي أو توق فه ل كن المس تخدم هو من يمك نه أن يض بط هذه المكونات اللكترون ية بحيث يجعل الحاسوب يعرض صورة أو يعزف قطعة من الموسيقى وهذا هو البرمجة في أبسط صورها أن تجعل الحاسوب ينفذ أمر ما. 18
بالط بع إن عمل ية ض بط هذه المكونات اللكترون ية هي عمل ية مجهدة ومعقدة وه نا يأتي دور لغات البرمجة. 1.12.1 ما هي لغة البرمجة ي عبر الناس عن أنفس هم أ ستخدم لغات تتكون من العد يد من الكلمات. الحا سوب يستخدم لغة بسيطة تتكون من حرفين فقط ١ و.٠ فيعبر عن وجود التيار الكهربي في دائرته بالعدد ١ و عن انعدام وجود التيار الكهر بي بالعدد.٠ إن محاولة التخا طب مع الحا سوب باستخدام لغته أشبه بالتخاطب مع صديق باستخدام شفرة مورس. ممكن نعم لكن صعب. تع مل لغات البرم جة بمثا بة متر جم بي نك وب ين الحا سوب. فعوضا I عن تعلم الل غة ال صلية للحا سوب وال تي يطلق علي ها أ سم ل غة اللة Machine Language يم كن استخدام لغات البرمجة بطرقة أبسط وأكثر قابلية للفهم. ع ند كتا بة برنا مج بأي من لغات البرم جة يقوم برنا مج خاص يس مى المج مع compiler بتحويل التعليمات التي كتبت بلغة البرمجة إلى لغة اللة. وهذا يعني أن مبرمج Visual Basic ليس عليه أن يهتم بكيف سيقوم الحاسوب بتنفيذ تعليماته بل عليه أن يعرف كيف يعبر عما يرغب باستخدام.Visual Basic 1.12.2 طبيعة لغة Visual Basic.NET تتشابه لغة Visual Basic مع اللغة التي نستخدمها في حياتنا اليومية. عندما نتحدث أو نك تب نس تخدم أنواع مختل فة من الكلمات م ثل الفعال وال سماء وال تي تس تخدم بطري قة معرفة سلفا. كذلك في Visual Basic هناك مجموعة من الكلمات المعروفة باسم عناصر البرمجة المعرفة الستخدام والتي تستخدم في كتابة البرامج. تشت مل عنا صر البرم جة في Visual Basic على العبارات والعلنات Declarations والطرق Methods والعاملت Statements Operators والكلمات المحجوزة.Keywords بنهاية هذا الكتاب سوف تكون ملم بهذه العناصر وكيفية استخدامها. اللغات النسانية لها قواعد Syntax التي تحدد كيف يتركب الكلم في جملة. وكذلك Visual Basic تحتوي على قوا عد خا صة ب ها تتم يز بالس هولة الشديدة. فمثل I العبارة "السرعة القصوى لسيارتي هي "٥٠ يمكن التعبير عنها في Visual Basic كما يلي : 19
Car.Speed.Maximum=50 في نها ية هذا القس م ستتعلم الكث ير عن قوا عد ل غة Visual Basic والدوات ال تي سوف تساعدك في تصحيح صيغ الشفرة في برنامجك مثل الداة IntelliSense التي تساعد المبرمج في تصحيح شفرة البرنامج أثناء كتابته إياها. وك ما أن الل غة البشر ية تتكون من أجزاء فمثل I يتكون هذا الكتاب من أبواب وب كل باب عدد من المقاطع يتكون كل مقطع من ج مل أيضا I تتكون البرامج المكتوبة ب ـ Visual Basic من أجزاء يطلق عليها modules التي تقوم مقام الباب و procedures التي تقوم مقام المقاطع وأخيرا I سطور الشفرة lines of code التي تقوم مقام العبارات. 1.12.3 الخصائص والطرق والحداث عند ما قم نا بإنشاء برنا مج متص فح النتر نت في القس م ر قم ٢ من هذا الكتاب استخدمنا عناصر التحكم مثل المفتاح Button وصندوق النصوص TextBox لبناء واجهة البرنا مج. تم ثل عنا صر التح كم ال تي ا ستخدمناها نموذج مثالي ل ما يطلق عل يه في Visual Basic.NET اسم الكائن.Object وبالر غم من أن نا سنتعرض للكائنات في قس م مس تقل من هذا الكتاب إل أن عرض مبسط للمفاهيم الساسية للكائنات سيبسط لنا الكثير من المسائل التي سوف نتناولها في هذا القسم وأقسام أخرى قادمة. الكائنات Objects ك ما تقدم ها Visual Basic لمس تخدميها هي محاكاة لمفهوم الكائنات في الواقع الحي. فأي كائن في الواقع الحي يمكن التعامل معه من خلل ثلثة مفاهيم هي الخصائص Properties والطرق Methods والحداث.Events خصائص الكائن هي مجموعة الوصاف التي تميزه فالبالون ككائن في الواقع يمكن و صفه عن طر يق ب عض الخص ائص م ثل اللون والق طر وحال ته من ح يث كو نه منتفخا I أم فارغ. فإذا انتقلنا إلى Visual Basic فإن هذه الخصائص يمكن ترجمتها إلى شفرة تعليمات كالتالي : Balloon.Color = Red Balloon.Diameter = 10 Balloon.Inflated = True 20
يمكن أن نقرأ هذه السطور من الشفرة كالتالي : خاصية اللون للكائن بالون هي أحمر خا صية الق طر Diameter للكائن بالون تس اوي ١٠ خا صية النتفاخ Inflated للكائن بالون حقيقية )أي أن البالون منتفخ(. بصورة عامة فإن خاصية أي كائن في Visual Basic يمكن تمثيلها كالتالي : object.property = value ح يث object ا سم الكائن property الخا صية ال تي نقوم بضبط ها value هي القي مة ال تي سوف نخص صها للخا صية. ويس مى ض بط الخا صية بهذه الطري قة با سم الض بط بالشفرة البرمج ية تمييزا I له عن الض بط عن طري قة تغي ير قي مة الخا صية في النافذة Properties كما فعلنا في القسم الثاني من الكتاب. من الناحية العلمية كل الطريقتين يؤديان إلى ن فس النتي جة إل أن طري قة الض بط بالشفرة البرمج ية هي الطري قة الوحيدة ال تي يم كن استخدامها عند تصميم الستجابة عن حدث معين كما سوف يأتي. المفهوم الثا ني الذي يتعلق بالكائن هو سلوك الكائن فأي كائن في العالم يم كن أن يتص رف تص رفات عدة فالكلب مثل I ككائن يم كن أن ين بح أو يحرك ذيله وكذلك البالون يمكنه أن يقوم بعدد من التصرفات كأن ينتفخ أو يفرغ الغاز الذي يحتويه أو يرتفع إلى أعلى. تسمى هذه التصرفات أو السلوك في Visual Basic بالسم "طرق "Methods كما بعض اللغات الخرى تدعوها "وظائف "Functions أي الوظائف التي يمكن أن يقوم بها الكائن. الن لو أن نا حاول نا أن نم ثل الوظائف ال تي يقوم ب ها البالون مس تخدمين Visual Basic.NET كيف سنعبر عن ذلك سنعبر عنها في صورة شفرة تعليمات كما يلي : Balloon.Inflate Balloon.Deflate ) Balloon.Rise(5 و هو ما يم كن قراء ته ك ما يلي. البالون يقوم بوظي فة النتفاخ Inflate البالون يقوم بوظيفة أفراغ غازه Deflate البالون يقوم بوظيفة الرتفاع إلى أعلى مسافة خمسة. وبصورة عامة يمكن تمثيل قيام كائن بطريقة ما باستخدام الصيغة : ) object.method (parameter1,parameter2,.. 21
ح يث object ا سم الكائن method ا سم الطري قة المطلوب م نه تنفيذ ها parameter1 و parameter2 وجم يع البارامترات الموجودة ب ين القواس المس تديرة )( هي قيم أو كائنات أخرى تخصص عمل الطريقة. المفهوم الثالث الساسي بالنسبة للكائنات وهو في الواقع أهم هذه المفاهيم الثلثة هو مفهوم الحدث.Event فأي كائن قد يتعرض لي حدث خارجي ومن ثم يستجيب إلى هذا الحدث فلو ا نك وخزت البالون بإبرة سوف تنف جر فالو خز هو الحدث والنفجار هو استجابة البالون لحدث الوخز. في Visual Basic تو جد مجمو عة من الحداث ال تي يم كن أن يس تجيب ل ها أي كائن. و يمكن معرفه هذه الحداث من خلل نافذة كتابة الشفرة كما هو مبين في شكل.3-10 شكل :10-3 التعرف على الحداث من خلل نافذة كتابة شفرة التعليمات الن لنفترض أن البالون الذي نحاول تمثيله في Visual Basic تعرض للو خز Puncture ك يف يم كن أن نقوم بتمث يل هذا الحدث في Visual Basic. شكل 3-11 يقدم لنا فكرة مصورة عن الطريقة التي سوف يتم تمثيل هذا الحدث بها. 22
شكل :11-3 حدث وخز البالون شفرة التعليمات التالية تمثل استجابة البالون لحدث الوخز. )( Sub Balloon_Puncture )" Balloon.MakeNoise("Bang Balloon.Deflate Balloon.Inflated = False End Sub بدا ية نل حظ أن الس طر الول يتكون من الكل ها مة Sub يتبع ()Balloon_Puncture هذا السطر يمثل بداية الحدث وجميع التعليمات التي ستأتي بعد هذا الس طر تم ثل ا ستجابة الكائن Balloon لحدث الو خز بين ما البارامترات الموجودة ب ين القوسين )( في حالتنا هذه ل توجد بارامترات تخصص طريقة الحدث. يتكون الحدث من مجموعة من السطور تمثل تغيير في قيم بعض خصائص الكائن Balloon وح ثه على القيام بب عض الوظائف أو الطرق. فمجموع تعليمات ال ستجابة على الحدث يم كن قراءت ها هكذا. ع ند وقوع حدث الو خز سيستخدم الكائن بالون الطري قة MakeNoise أي طريقة إصدار ضوضاء ويتم تخصيص الضوضاء في شكل كلمة Bang التي تقدم كبارامتر بين القوسين )( ثم يقوم الكائن بتنفيذ طريقة Deflate فيقوم بتفريغ نفسه من الغاز الذي يملؤه وأخيرا I تص بح الخا صية Inflated بمع نى ممتلئ بالغاز غ ير حقيق ية. وهذا هو ما يمثل استجابة البالون لحدث الوخز. 23
في النهاية يأتي السطر الخير وهو End Sub ليمثل نهاية الحدث وتعتبر جميع التعليمات الواردة ب ين ()Sub Balloon_Puncture و End Sub هي ا ستجابة الكائن Balloon على حدث الوخز. 1.12.4 الوظيفة IntelliSense أ هم ميزات Visual Studio.NET 2008 IDE في كتا بة البرا مج هو البس اطة والس هولة ح يث يم كن كتا بة برا مج طويلة با ستخدام عدة ضربات قليلة على لو حة المفات يح لكتابة تعليمات البرنامج وبأقل قدر ممكن الخطاء وذلك بفضل الوظيفة.IntelliSense تقدم هذه الوظي فة عدد من الدوات ال تي تس اعد ال مبرمج على كتا بة تعليمات شفرة برامجه ببساطة وبدون أخطاء تشتمل هذه الدوات على سرد العضاء List Members معلومات البارامترات Parameter Info والمعلومات الس ريعة Quick Info وإكمال الكلمات Complete Word وملحظات البنى اللغوية.Syntax Tips 1.12.4.1 سرد العضاء List Members عند ما تقوم بكتا بة ا سم كائن متبوعا I بمؤ شر النق طة point operator فإن قائ مة بجم يع خص ائص وطرق وأحداث و هي ما يطلق علي ها أ سم أعضاء الكائن على ما سوف نعرف في قسم متقدم من هذا الكتاب - هذا الكائن سوف تسرد كما هو مبين في شكل 3-12 حيث يمكن التحرك فيها باستخدام الفأرة أو باستخدام مفاتيح السهم كما يمكن الختيار منها عن طر يق ضرب مفتاح Space في لو حة المفات يح ح يث سوف ي تم إضافت ها على جوار الكائن فورا I عقب مؤشر النقطة. شكل :12-3 سرد العضاء 24
1.12.4.2 معلومات البارامتر Parameter Info عندما تكتب طريقة ما وتعقبها بفتح قوس مستدير ) لضافة البارامترات خاصتها تظ هر نافذة تحتوي على معلومات حول هذه البارامترات المطلوب إضافت ها وعند ما يكون هناك أك ثر من أ سلوب لو ضع هذه البارامترات ب ين القواس المس تديرة يمك نك ا ستعراض ال ساليب المختل فة عن طر يق تحر يك بكرة الفأرة أو ا ستخدام مفات يح ال سهم. أن ظر شكل 3-13 لمزيد من اليضاح. شكل :13-3 معلومات البارامتر 1.12.4.3 المعلومة السريعة Quick Info إذا ق مت بإ سناد مؤ شر الفأرة فوق أي كل مة من الكلمات ال تي تكون شفرة التعليمات سوف يظهر مربع يحتوي على تعريف كامل لماهية هذه الكلمة كما هو مبين في شكل.3-14 شكل :14-3 المعلومة السريعة 1.12.4.4 إكمال الكلمات Complete Word عندما تقوم بكتابة اسم لخاصية او طريقة أو حدث تظهر قائمة تستكمل لك هذا السم ك ما هو مبين في شكل 3-15 يم كن إدخال ال سم من ها مباشرة بضرب المفتاح Space من لوحة المفاتيح. شكل :15-3 إكمال الكلمات 25
1.13 تمثيل البيانات باستخدام المتغيرات تم ثل المتغيرات Variables مفهوم أ ساسي في برم جة الحوا سيب. المتغ ير هو حرف أو أ سم ي تم اختزان القي مة ف يه. عند ما تقوم بإنشاء برنا مج يمك نك ا ستخدام المتغيرات لختزان الرقام مثل ارتفاعات البنية أو الكلمات مثل أسماء الشخاص. بصورة عامة يمكن استخدام المتغيرات لتمثيل أي نوع من البيانات مطلوب في برنامجك. قد تسأل نفسك سؤال "لماذا أستخدم المتغيرات في حين يمكن استخدام قيم البيانات مباشرة ". ك ما هو وا ضح من الل فظ "متغيرات "Variables فإن الق يم ال تي تختزن في المتغيرات يم كن أن تتغ ير أثناء تشغ يل البرنا مج. فعلى سبيل المثال يمك نك أن تك تب برنا مج لتع قب عدد علب المياه الغاز ية في الثل جة هذا العدد يتغ ير مع الو قت ح يث أن هناك من يشرب هذه العلب وهناك أيضا I من يض يف علب جديدة إلى الثل جة وعوضا I عن كتا بة كل البيانات الخا صة بتغ ير عدد علب المياه الغاز ية دا خل البرنا مج يمك نك أن تس تعيض عن ها بمتغير يتم تزويده بعدد العلب أثناء تشغيل البرنامج. 1.13.1 اختزان البيانات في المتغيرات هناك ثلثة خطوات لستخدام المتغيرات هذه الخطوات الثلثة هي : العلن عن المتغير Declare the Variable تخصيص المتغير Assign the Variable استخدام المتغير Use the Variable 1.13.1.1 العلن عن المتغيرات عند العلن عن متغير يجب أن تحدد أسم لهذا المتغير ونوعية البيانات التي سوف يختزن ها. تس تخدم للعلن عن المتغيرات الكل مة المحجوزة Dim متبو عة با سم المتغ ير ثم الكلمة المحجوزة As متبوعة بنوع البيانات التي سوف يتم اختزانها في هذا المتغير. Dim anumber as Integer 26
هذا الس طر من الشفرة ي خبر البرنا مج أ نك تر يد العلن عن ا ستخدام متغ ير أ سمه anumber ليختزن بيانات نوعها.Integer ونتيجة لتعريف المتغير anumber كمتغير من النوع Integer فهو يمكنه فقط اختزان قيم رقمية صحيحة فقط. 1.13.1.2 تخصيص المتغير لتخص يص قي مة لي تم اختزان ها في المتغ ير تس تخدم عل مة = وال تي قد تد عي أحيا نا معامل التخصيص.assignment operator anumber = 42 هذا السطر من الشفرة يقوم باختزان الرقم ٤٢ داخل المتغير المسمى.aNumber 1.13.1.3 العلن عن المتغيرات وتخصيص قيم افتراضية لها كما تعرفنا سابقا I يمكننا العلن عن المتغير في سطر ثم تخصيص قيمته في سطر آخر وهذا ما قد ينتج عنه خطأ إذا أردت أن تقوم بتخصيص قيمه المتغير قبل العلن عنه. لهذا السبب فمن المستحسن أن يتم العلن عن المتغير وتخصيص قيمته في سطر واحد. حتى ولو لم تكن تعرف ما هي القيمة التي سوف تختزن في المتغير يمكنك تخصيص قيمة افتراضية. السطر التالي يبين كيف يمكن للمستخدم أن يختزل السطرين المذكورين في 1.13.1.1 1.13.1.1 و 1.13.1.2 مرة واحدة. Dim anumber As Integer = 42 1.13.1.4 تدريب : العلن عن المتغيرات وتخصيص قيم لها في هذا التدر يب سوف نحاول أن نقوم بكتا بة برنا مج يو ضح ما سبق ح يث ي تم العلن عن المتغيرات وتخص يص ق يم ل ها ثم إظهار ها على الشا شة في صندوق ر سائل.Message Box بداية قم بإنشاء مشروع جديد متبعا I الخطوات التالية :.20 قم بفتح Visual Basic من قائمة.Start.21 من قائمة File أختر.New Project.22 من القوالب الظاهرة في نافذة New Project أختر.WindowsApplication.23 قم بتخصيص أسم للمشروع في الخانة Name وليكن.Variables 27
قم بكتابة شفرة البرنامج متتبعا I الخطوات التالية :.24 أنقر مرتين فوق النموذج المعروض. تظهر نافذة تحرير الشفرة Code Editor على مق طع من الشفرة معنون ب ـ.Form_Load هذا المق طع وأترا به يطلق عل يه أ سم الجراء Procedure وهو يحتوي التعليمات التي سوف تنفذ عند تحميل النموذج إلى ذاكرة الحاسوب..25 في الجراء Form_Load قم بكتابة الشفرة التالية : Dim aninteger As Integer = 42 Dim asingle As Single = 39.345677653 " Dim astring As String = "I like candy Dim aboolean As Boolean = True يعرف هذا الكود أرب عة متغيرات من أرب عة أنواع مختل فة هي aninteger متغير من النوع Integer و asingle متغير من النوع Single و astring متغير من النوع String و aboolean متغ ير من النوع Boolean وي تم تخص يص ق يم مناسبة لهم كل A في سطر تعريفه. قم بكتابة الشفرة التالية أسفل الشفرة السابقة. ) MsgBox(anInteger ) MsgBox(aSingle ) MsgBox(aString ) MsgBox(aBoolean End تقوم الس طور الرب عة الولى من هذه الشفرة با ستخدام الدالة function المس ماة MsgBox و هي الوظي فة المس ئولة عن صناديق الر سائل Message Box بإظهار قيم المتغيرات في صناديق رسائل. بينما يفيد السطر الخير بإنهاء البرنامج. قم بضرب المفتاح F5 من لوحة المفاتيح أو أختار Start Debugging من القائمة Debug لتشغيل البرنامج. عند تشغيل البرنامج تظهر قيم المتغيرات في صناديق الرسائل قم بالنقر على المفتاح Ok في كل صندوق حتى يغلق الصندوق ويفتح الصندوق الذي يليه بعد الصندوق الرابع يتم إغلق البرنامج. 28
1.13.2 أنواع البيانات أنواع البيانات في Visual Basic تحدد ما هي القيم الممكن اختزانها في المتغير وكيفية اختزانها ونوعية العمليات الممكن إجراءها عليها. لماذا هناك أنواع عدة من المتغيرات. دع نا نف كر بهذه الطري قة لو أن نا لدي نا ثل ثة متغيرات اثنان من هذه المتغيرات رقمي ين والثالث عبارة عن أ سم يم كن القيام بعمليات حس ابية با ستخدام المتغير ين الرقمي ين لكن ليس باستخدام المتغير الثالث. لذلك فعندما نقوم بتعريف المتغير فنحن نحدد كيف يمكن أن يستخدم هذا المتغير. 1.13.2.1 أنواع البيانات الرقمية مع ظم برا مج الحا سوب تتعا مل مع الرقام. ول ما كان هناك أنواع عديدة من الرقام فبالتالي تمتلك Visual Basic أنواع عدة من البيانات الرقمية. تنقسم البيانات الرقمية إلى : البيانات الرقم ية الص حيحة :Integral Numeric Types و هي تلك البيانات الرقم ية ال تي ل تحتوي على عل مة عشر ية و هي بدور ها تنقس م إلى عدة أنواع يبين ها الجدول التالي : النوع SByte Short Integer Long Byte UShort UInteger ULong مساحة الختزان بايت ) ٨ بيت( ٢ بايت ) ١٦ بيت( ٤ بايت ) ٣٢ بيت( ٨ بايت ) ٦٤ بيت( بايت ) ٨ بيت( ٢ بايت ) ١٦ بيت( ٤ بايت ) ٣٢ بيت( ٨ بايت ) ٦٤ بيت( القيمة الدنيا ١٢٨ 32,768 2,147,483,648 9,223,372,036,854,775,808 ٠ ٠ ٠ ٠ القيمة العظمى ١٢٧ 32,767 2,147,483,647 9,223,372,036,854,775,807 ٢٥٥ 65,535 4,294,967,295 1.84E+18 البيانات الرقم ية غ ير الص حيحة :Non-integral Numeric Types و هي البيانات الرقم ية ال تي تحتوي على كس ور أو علمات عشر ية. وتنقس م هذه النوع ية من البيانات إلى نوعين يبينهما الجدول التالي : النوع Single Double مساحة الختزان ٤ بايت ) ٣٢ بيت( ٨ بايت ) ٦٤ بيت( القيمة الدنيا ±1.401298E-45 ±1.79769313486231570E+308 القيمة العظمى ±3.4028235E+38 ±4.94065645841246544E-324 29
1.13.2.2 أنواع البيانات اللفظية البيانات اللفظ ية هي تلك البيانات ال تي تتكون من الحروف أو الرقام )يشترط من ا ستخدامها مع الرقام عدم ا ستخدام هذه الرقام في عمليات حس ابية( أو العلمات الخا صة مثل & أو $ أو المسافات الفارغة. يمكن تمثيل البيانات اللفظية بنوعين من البيانات هما :.26 النوع :Char ويستخدم لحفظ حرف واحد فقط..27 النوع :String ويستخدم لحفظ عدد من الحرف. أنواع أخرى من البيانات يستخدم Visual Basic أنواع أخرى من البيانات لتمثيل أشكال مختلفة من القيم سنتعرف على معظم هذه النواع أثناء الفصول القادمة لكن هناك بعض النواع التي يجدر الشارة إلي ها م ثل النوع Date الذي يس تخدم لح فظ بيانات التار يخ والز من والنوع Boolean الذي يستخدم في تمثيل قيمتين أحدهما تنفي الخرى مثل True و.False ك ما ي جب الشارة إلى نوع البيانات Object الذي يت يح لك اختزان بيانات مجهولة النوع ثم تعريفها في مكان آخر من البرنامج. 1.13.3 البيانات النصية ليس ت كل البيانات ال تي يتعا مل مع ها ال مبرمج من النوع الرق مي بل يو جد نس بة معتبرة من البيانات النصية يتعامل معها المبرمج. يستخدم نوع خاص من البيانات يسمى الـ String للتعا مل مع البيانات النص ية. يس تخدم النوع String لتمث يل سلسلة من الرموز النصية Characters مثل الحروف والرقام والرموز الخاصة والمسافات. ي تم تعر يف ال ـ String بن فس الطري قة ال تي ي تم ب ها تعر يف المتغيرات الرقم ية أي باستخدام الكلمات المحجوزة Dim و.As السطر التالي يبين تعريف لمتغير نصي. " Dim astring As String = "This is a string 30
ع ند تخص يص نص لمتغ ير من النوع ال ـ String ي جب و ضع ال نص ب ين علم تي تنصيص )" "(. يمكن كذلك تخصيص قيمة متغير نصير بواسطة متغير نصي آخر مثل المبين في الشفرة التالية. " Dim astring As String = "This is a string... " " = Dim bstring As String bstring = astring في الشفرة الس الفة المتغ ير bstring ي تم تخص يصه ليس اوي القي مة المختز نة في المتغير.aString يمكن استخدام علمة )&( لدمج متغيرين نصيين معا I في متغير واحد كما هو مبين في الشفرة التالية. " Dim astring As String = "Across the Wide " Dim bstring As String = "Missouri "" = Dim cstring As String cstring = astring & bstring في المثال الس ابق ي تم تعر يف ثل ثة متغيرات من النوع String ثم ي تم تخص يصها على التوالي بالق يم " "Across the Wide و " "Nile للمتغير ين الول ين ثم ي تم تعر يف المتغير الثالث بأنه محصلة دمج المتغيرين الول والثاني. هل تعلم ما هي القيمة المختزنة في المتغير الثالث أنها " "Across the WideNile نعم بل مسافة فاصلة بينهما وذلك لن المتغير الول astring ل يحتوي في نهايته على مسافة فارغة كما ل يحتوي المتغير الثاني bstring على مس افة فار غة في بداي ته. لعلج هذه المس ألة يتع ين علي نا ا ستخدام المس افة الفارغة " " كما هو مبين في الشفرة التالية. " Dim astring As String = "Across the Wide " Dim bstring As String = "Nile " " = Dim cstring As String cstring = astring & " " & bstring 31
1.13.3.1 تدريب : دمج المتغيرات النصية الن حان و قت التدر يب. سنقوم بتجر بة ما ناقشناه في ما سبق عن د مج المتغيرات النصية. أتبع الجراءات التالية لعداد التطبيق الذي سيتم من خلله إختبار دمج المتغيرات..28 من القائمة File أنقر فوق.New Project.29 من نافذة New Project أختار Template ومن ها Windows Application ثم أنقر المفتاح.Ok.30 أنقر مرتين فوق النموذج ليظهر الـ.Code Editor.31 في إجراء الحدث Form1.Load قم بكتا بة الشفرة التال ية لتعرف أرب عة متغيرات نصية وتخصصها. " Dim astring As String = "Concatenating " Dim bstring As String = "Without " Dim cstring As String = "With " Dim dstring As String = "Spaces قم بإضا فة الشفرة التال ية ع قب الشفرة الس ابقة مباشرة ح تى تس تخدم الوظي فة MsgBox لظهار نتائج دمج المتغيرات. ( MsgBox(aString & bstring & dstring " ' Displays "ConcatenatingWithoutSpaces ( MsgBox(aString & " " & cstring & " " & dstring " ' Displays "Concatenating With Spaces قم بضرب المفتاح F5 لتنف يذ البرنا مج تل حظ أن صندوق الر سالة الول تعرض الر سالة ConcatenatingWithoutSpaces بين ما يعرض صندوق الر سالة الثاني الرسالة.Concatenating With Spaces 1.13.4 المصفوفات Arrays سنتعرف الن عن المصفوفات Arrays التي تستخدم لختزان مجموعة من القيم. 32
في ما سبق عرف نا أن المتغيرات تس تخدم لختزان أنواع مختل فة من البيانات لي تم ا ستخدامها في البرا مج. هناك نوع آ خر من المتغيرات تس مى المص فوفة Array وال تي تستخدم لختزان قيم متعددة من نفس النوع. لنفترض مثل I أنك تكتب برنامج عن فريق كرة القدم وتريد اختزان أسماء اللعبين عندئذ قد تضطر للعلن عن أحد عشر متغير متغير لكل لعب أو السهل أن تعلن عن مصفوفة مستخدما I الشفرة التالية. Dim players() As String في هذه الشفرة قم نا بالعلن عن مص فوفة تختزن بيانات نص ية فالقو سين )( يس تخدمان لعلن المص فوفة وعدم وجود قي مة عدد ية يع ني أن نا ل نعرف عدد الق يم ال تي سوف تختزن في المص فوفة أ ما في حالة ما إذا ك نا نعرف عدد المتغيرات فيمكن نا أن نعدل الشفرة لتصبح كما يلي. Dim players(١٠) As String ل يجب أن يخدعك العدد ١٠ الذي أضفناه بين القوسين فل تنسى أن الحاسوب يعد من الص فر وبذلك يكون عدد الق يم ال تي يم كن إختزان ها في هذه المص فوفة و هو ما يس مى بطول المصفوفة أحد عشر قيمة. 1.13.4.1 تخصيص قيم للمصفوفة ك ما في أنواع البيانات الخرى يلزم نا أن نقوم بتخص يص ق يم للمص فوفة. لع مل ذلك يجب استخدام رقم يشير إلى مكان القيمة التي سوف تختزن في المصفوفة كما هو مبين فيما يلي. " players(0) = "John " players(3) = "Bart في الشفرة السابقة القيمة John تم تخصيصها لول عنصر في المصفوفة )العنصر رقم صفر( بينما تم تخصيص القيمة Brett للعنصر الرابع للمصفوفة )العنصر رقم ثلثة(. ل يس من الضروري إختزان عنا صر المص فوفة بالترت يب و في حالة عدم تخص يص قي مة للعنصر فإن قيمته تصبح هي القيمة الفتراضية لنوع البيانات. يم كن أيضا I العلن عن المص فوفة وتخص يص ق يم عنا صرها في سطر واحد كما يلي. 33
} Dim players() As Integer = {1, 2, 3, 4, 5, 6, 7, 8, 9 حيث تستخدم القواس من النوع }{ لتخصيص القيم كما تستخدم الفاصلة ) ( للفصل بين القيم. كما تلحظ أن طول المصفوفة لم يخصص حيث أن طول المصفوفة يتم تخصيصه عن طريق عدد العناصر المحتواة بين القواس. 1.13.4.2 استرجاع القيم المختزنة في المصفوفة كما استخدمنا الرقام لنبين المكان الذي سوف يتم اختزان القيمة فيه في المصفوفة سوف نس تخدم الرقام مرة أخرى لتعي ين القي مة المراد ا سترجاعها من ب ين ق يم عنا صر المصفوفة. Dim AtBat As String ( AtBat = players(3 1.13.5 التحويل بين أنواع المتغيرات كثيرا I ما يحتاج ال مبرمج إلى تحو يل بيانات مختز نة في نوع مع ين من البيانات إلى نوع أخر. فيما يلي نتناول الطرق التي يمكن استخدامها لداء مثل هذا العمل. 1.13.5.1 تحويل المتغيرات إلى متغيرات نصية كل المتغيرات المس تخدمة في Visual Basic يم كن تحويل ها إلى متغ ير نص ي با ستخدام الوظي فة.CStr في الشفرة التال ية نس تخدم هذه الوظي فة لتحو يل قي مة من النوع Integer إلى النوع.String Dim aninteger As Integer = 54 )) MsgBox(CStr(anInteger 1.13.5.2 التحويل بين المتغيرات الرقمية تس تخدم مجمو عة من الوظائف للتحو يل ب ين البيانات الرقم ية بن فس الطري قة المستخدمة مع الوظيفة.CStr الجدول التالي يبين هذه الوظائف ونوعية البيانات التي تحول إليها. الوظيفة ) CBool(expression ) CByte(expression 34 نوع البيانات التي تحول إليها Boolean Byte
) CChar(expression ) CDate(expression ) CDbl(expression ) CDec(expression ) CInt(expression ) CLng(expression ) CObj(expression ) CSByte(expression ) CShort(expression ) CSng(expression ) CStr(expression ) CUInt(expression ) CULng(expression ) CUShort(expression Character Date Double Decimal Integer Long Object Signed Byte Short Single String Unsigned Integer Unsigned Long Unsigned Short 1.14 العمليات على المتغيرات يتم استخدام المتغيرات في البرامج لستخدامها في العمليات المختلفة. هذه العمليات قد تكون عمليات حس ابية م ثل الج مع والضرب و ما إلى ذلك أو قد تكون عمليات مقار نة منطقية. فيما يلي نتعلم أساسيات استخدام المتغيرات في العمليات. 1.14.1 العمليات الحسابية تعت مد العمليات الحس ابية على كتا بة ال مبرمج لت عبير Expression دا خل برنام جه يقوم بإنجاز العملية الحسابية ثم يقوم بإرجاع قيمتها. التعبير هو عبارة عن قطعة من الشفرة التي تنفذ عملية حسابية ثم ترجع القيمة. كمثال تعبير الجمع البسيط المبين فيما يلي : 5+4 هذا الت عبير ير جع القي مة ٩ و هو يتكون من جزأ ين الحدود Operands و هي الق يم ال تي ي تم إجراء العمل ية عل يه والعا مل Operator والذي في هذه الحالة عا مل الج مع ) (+ الذي يحدد نوع العملية الحسابية المطلوب إجراءاها. 1.14.1.1 استخدام القيم المرتجعة من التعبيرات حتى يصبح التعبير مفيدا I في البرنامج لبد من اختزان القيمة المرتجعة عن التعبير في متغير. الشفرة البسيطة التالية تبين طريقة لختزان القيمة المرتجعة عن تعبير : Dim aninteger As Integer = 5 + 4 35
في هذه الشفرة ي تم العلن عن متغ ير aninteger من النوع الرق مي الص حيح Integer ثم يتم تخصيص القيمة المرتجعة من التعبير 4+5 باستخدام علمة التساوي )=( ليتم اختزانها في هذا المتغير. 1.14.1.2 العاملت الحسابية الستخدام الكثر شيوعا I للتعبيرات هو لنجاز العمليات الحسابية مثل الجمع والطرح والضرب والقسمة. الجدول التالي يبين العاملت المستخدمة في العمليات الحسابية. الوصف يرجع حاصل جامع رقمين يرجع الفرق بين رقمين يرجع حاصل ضرب رقمين يرجع خارج قسمة رقمين العامل + * / مثال ٤+٥ ٤-٥ ٤*٥ ٥/٤ يجب الخذ في العتبار أن نوع البيانات المستخدمة في التعبير يمكنها أن تؤثر على القيمة المرتج عة من التعبير. فمثل I قس مة رقم ين ينتج عنها قيمة ل تمثل كامل الرقم النا تج. فمثل I إذا قم نا بقس مة ٣ على ٢ فإن النا تج سوف يكون.1.5 إذا حاولت أن تخص ص القي مة المرتج عة من هذا الت عبير لمتغ ير من النوع Integer فإن النا تج سيتم تقري به لقرب عدد صحيح أي يكون النا تج ٢ لذلك يس تحسن أن نقوم باختزان خارج القس مة على و جه الخصوص في متغير من النوع.Double 1.14.1.3 تدريب : تنفيذ العمليات الحسابية.32 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.33 قم بسحب ورمي عنصر التحكم Textbox مرتين فوق النموذج..34 قم بسحب عنصر تحكم Button ورميه فوق النموذج..35 أن قر نقرا A مزدوجا A فوق عنص ر التح كم Button لتظ هر نافذة محرر الشفرة.Editor 36 Code
.36 في إجراء الحدث Button1_Click قم بكتابة الشفرة التالية : Dim A As Double = Textbox1.Text Dim B As Double = Textbox2.Text ) MsgBox(A + B ) MsgBox(A B ) MsgBox(A * B ) MsgBox(A / B في السطرين الوليين نقوم بالعلن عن متغيرين A و B والذي سوف نستخدمها لختزان الق يم الرقم ية ال تي نحتاج ها لتمام عمل ية الج مع. ثم نس تخدم خا صية Text ل كل Textbox اللذان أضفناهما إلى النموذج لتلقي قيم A و.B في الس طور الرب عة الخيرة ي تم إنشاء أرب عة ت عبيرات ل كل عمليات من العمليات الحسابية الربعة الرئيسية ثم نستخدم الوظيفة MsgBox لظهار الناتج. أضرب المفتاح F5 لتنفيذ البرنامج. قم بكتابة رقم في كل صندوق نصي من المثبتة إلى النافذة Form1 ثم أنقر المفتاح Button1 لتنفيذ العمليات الربعة وإظهار النتائج. 1.14.2 العمليات المنطقية في هذا الجزء نتعلم ك يف نقوم بالمقارنات المنطق ية با ستخدام الت عبيرات. سنستخدم في هذا النوع من الت عبيرات ما يس مى بعاملت المقار نة Comparison Operators هذا النوع من العاملت ل يرجع قيم عددية ولكنه يرجع قيم من النوع الـ Boolean أي True و.False تس تخدم هذه العاملت بص ورة متكررة في عمليات اتخاذ القرارات Decisions والتي سنتعرض لها في جزء لحق. الجدول التالي يبين عاملت المقارنة المختلفة. العامل وصفه = يرجع قيمة True إذا تساوي حدي المقارنة وقيمة False إذا لم يتساويا. >< يرجع قيمة True إذا لم يتساوي حدي المقارنة وقيمة False إذا تساويا. مثال ) 5 = 4 (false ) 4 = 5 (false ) 4 = 4 (true ) 5 <> 4 (true 37
< يرجع قيمة True إذا كانت قيمة الحد اليسر أكبر من قيمة الحد اليمن وقيمة False إذا حدث غير ذلك. > يرجع قيمة True إذا كانت قيمة الحد اليسر أصغر من قيمة الحد اليمن وقيمة False إذا حدث غير ذلك. <= يرجع قيمة True إذا كانت قيمة الحد اليسر أكبر من أو تساوي قيمة الحد اليمن وقيمة False إذا حدث غير ذلك. >= يرجع قيمة True إذا كانت قيمة الحد اليسر أصغر من أو تساوي قيمة الحد اليمن وقيمة False إذا حدث غير ذلك. ) 4 <> 5 (true ) 4 <> 4 (false ) 5 > 4 (true ) 4 > 5 (false ) 4 > 4 (false ) 5 < 4 (false ) 4 < 5 (true ) 4 < 4 (false ) 5>= 4 (true ) 4 >= 5 (false ) 4 >= 4 (true ) 5<= 4 (false ) 4 <= 5 (true ) 4 <= 4 (true 1.14.2.1 تدريب : استخدام عاملت المقارنة.37 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.38 قم بسحب ورمي عنصر التحكم Textbox مرتين فوق النموذج..39 قم بسحب عنصر تحكم Button ورميه فوق النموذج..40 أن قر نقرا A مزدوجا A فوق عنص ر التح كم Button لتظ هر نافذة محرر الشفرة Code.Editor.41 في إجراء الحدث Button1_Click قم بكتابة الشفرة التالية : ) Dim A As Double = CDbl(Textbox1.Text ) Dim B As Double = CDbl(Textbox2.Text ) MsgBox(A > B ) MsgBox(A < B ) MsgBox(A = B في السطرين الولين يتم العلن عن متغيرين من النوع الـ Double هما A و B حيث يتم تخصيصهما من خلل الخاصية Text لعنصر التحكم Textbox بعد تمريرهما من خلل الوظيفة CDbl لتحويلهما من النوع String الذي يميز الخاصية Text إلى النوع.Double 38
في السطور اللحقة يتم استخدام الوظيفة MsgBox لظهار نتيجة ثلثة أنواع من المقارنة. أضرب المفتاح F5 لتنفيذ البرنامج. قم بكتابة رقم في كل صندوق نصي من المثبتة إلى النافذة Form1 ثم أنقر المفتاح Button1 لتنفيذ عمليات المقار نة وإظهار النتائج ال تي ستكون أ ما True أو.False 1.15 الجراءات Procedures في ما يلي سنتعلم ك يف ننش ئ إجراء خاص ب نا كيف ية إنشاء بارمترات هذا الجراء بحيث يكون هذا الجراء يحتوي شفرة يمكن استدعاءها من مكان آخر في البرنامج. يمكننا أن ننظر إلى الجراء على أنه قطعة من الشفرة التي يمكنها أن تخبر البرنامج أن يقوم بف عل مع ين. وبالر غم من أ نك قد ل تكون قادرا I على ا ستيعاب هذه الفكرة إل أ نك قد ق مت با ستخدام الجراءات من خلل في التدريبات والمثلة الس ابقة. فمثل I الوظي فة MsgBox هي عبارة عن إجراء التي تقوم بفعل محدد هو إظهار الرسائل. وبالرغم من Visual Basic تحتوي على العديد من الجراءات النافعة إل انه قد تحتاج في ب عض الحيان لجراء ل تتضم نه Visual Basic فمثل I تتض من Visual Basic الوظيفة MsgBox التي تقوم بإظهار رسالة على الشاشة لكنها ل تتضمن وظيفة لظهار رسالة على الشاشة مصحوبة بصورة. في حال ما إذا أردت مثل هذه الوظيفة سيكون عليك إنشاء إجراء لها. 1.15.1 ما هو الجراء الجراء هو كتلة من الشفرة التي يمكن ا ستدعاءها وتنفيذ ها من خلل أجزاء أخرى من الشفرة. بص ورة عا مة الجراءات تحتوي على الشفرة اللز مة لتنفيذ ها عمل ية وحيدة محددة. على سبيل المثال يمكن أن يكون لديك إجراء يسمى PlaySound يحتوي على شفرة لتشغ يل ملف مو سيقي من النوع.wave على ح ين يمك نك كتا بة شفرة لتشغ يل الص وت كل مرة يحتاج برنامجك إصدار صوت من الفضل في هذه الحالة أن تقوم بإنشاء إجراء يمكنه 39
عمل هذه المهمة إصدار صوت ثم استدعاءه بعد ذلك من أي مكان في البرنامج يتطلب أداء مهمة إصدار الصوت. يتم تشغيل الجراء عن طريق استدعاءها Calling في الشفرة. فمثل I لتنفيذ الجراء PlaySound كل ما يتطلبه المر إضافة سطر في المكان المخصص في البرنامج لصوت يكتب فيه أسم الجراء كما يلي. PlaySound عند ما يص ل البرنا مج لهذا الس طر يقوم بالنتقال إلى الجراء PlaySound منفذا الشفرة التي يحتويها هذا الجراء وعند النتهاء من تنفيذ شفرة الجراء ينتقل البرنامج مرة أخرى للسطر التالي للسطر الذي ذكر فيه أسم الجراء.PlaySound يمك نك ا ستدعاء العد يد من الجراءات ك ما يحلو لك. وعندئذ ي تم تنف يذ الجراءات المختل فة بذات الترت يب الذي ق مت با ستدعائها ف يه. فمثل ã لنفترض أن لد يك إجراء آ خر غ ير PlaySound هو الجراء DisplayResult وأنك تريد تنفيذه بعد الجراء PlaySound كل ما تحتاجه عندئذ هو كتابة أسم الجراء الخر بعد الجراء الول كما يلي. PlaySound DisplayResult 1.15.2 أنواع الجراءات هناك نوع ين من الجراءات : الوظائف functions والروتينات الفرع ية ) Subroutines وهذه الخيرة قد تدعى أحيانا Subs I للختصار(. الوظيفة ترجع قيمة إلى الجراء الذي ا ستدعاها على ح ين والروتينات الفرع ية تقوم بتنف يذ شفرة ف قط. ي تم ا ستدعاء الروتينات الفرعية بمجرد كتابة أسمها فقط كما في المثال التالي. DisplayResults الوظائف تختلف في عمل ها عن الروتينات الفرع ية ف هي ل تقوم بتنف يذ الشفرات فحس ب لكن ها تر جع أيضا I ق يم. لنتخ يل وظي فة تس مى GetDayOfWeek ال تي تر جع ر قم صحيح يشير إلى اليوم في السبوع. لستدعاء هذه الوظي فة ي جب أول I العلن عن المتغير الذي سوف ي تم الحتفاظ ف يه بالقي مة المرتج عة ثم نقوم بتخص يص القي مة المرتج عة لهذا المتغير في سطر آخر كما هو مبين فيما يلي. Dim Today As Integer 40
Today = GetDayOfWeek في هذا المثال القيمة المرتجعة من الوظيفة يتم اختزانها في المتغير Today لحين استخدامها لحقا. 1.15.3 إنشاء الجراء عند إنشاء إجراء نقوم في البداية بالعلن عن الجراء. العلن عن الجراء يعني العديد من الشياء فهو يحدد إذا كان الجراء وظيفة أم روتين فرعي كما يحدد أسم الجراء الذي سوف يستخدم للستدعاء والبارمترات المطلوبة في الجراء. الشفرة التالية تبين إعلن بسيط عن إجراء. )( Sub MyFirstSub End Sub الكلمة المحجوزة Sub تخبر البرنامج أن هذا الجراء من النوع Sub وبالتالي فهو ل يرجع قيم. أسم الجراء هو MyFirstSub بينما تشير القواس الفارغة ) ( إلى أن هذا الجراء ل يحتاج بارامترات. وأخيرا I تأ تي الكل مة المحجوزة End Sub لتعلن انتهاء الجراء. الشفرة إلي سوف يقوم هذا الجراء بتنفيذها يتم كتابتها بين هذين السطرين. العلن عن الوظائف يشبه العلن عن الروتينات الفرعية لكن مع إضافة صغيرة هي تعريف نوع البيانات للقيم التي سوف يقوم الجراء بإرجاعها. فمثل I الوظيفة التي سترجع قيمة من النوع Integer تتخذ الشكل التالي. Function MyFirstFunction() As Integer End Function الكلمتين المحجوزتين As Integer تشير إلى أن الوظيفة ستقوم بإرجاع قيمة من النوع.Integer ل سترجاع القي مة من الوظي فة تس تخدم الكل مة المحجوزة Return ك ما هو مبين في المثال التالي. Function GetTheNumberOne() As Integer Return 1 End Function سوف يقوم الجراء بإرجاع القيمة.١ 41
1.15.3.1 تدريب : إنشاء إجراء.42 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.43 أنقر نقرا A مزدوجا A فوق النموذج حتى تظهر نافذة.Code Editor.44 قم بالب حث عن الس طر الذي يحتوي على End Class و هو ما يم ثل نها ية الشفرة المسئولة عن بناء النموذج. قبل هذا السطر مباشرة قم بكتابة الشفرة التالية. Function GetTime() As String ) Return CStr(Now End Function.45 هذه الوظي فة تس تخدم إجراء متض من Built-in Procedure في Visual Basic تس تخدم لرجاع القي مة الحال ية للو قت. ثم تس تخدم الوظي فة CStr لتحويل ها إلى قي مة نصية. هذه القيمة هي التي سوف ترجع من الوظيفة..46 فوق الوظيفة التي قمت بإضافتها في الخطوة السابقة أضف ما يلي من شفرة. )( Sub DisplayTime ) MsgBox(GetTime End Sub.47 هذه الشفرة تم ثل روت ين فر عي يقوم با ستدعاء الوظي فة GetTime ويعرض النا تج المرتجع عن هذه الوظيفة في صندوق رسائل..48 أخيرا A قم بإضا فة هذا الس طر التالي إلى الحدث Form1_Load الذي يس تدعي الروتين الفرعي.DisplayTime )( DisplayTime.49 أضرب المفتاح F5 لتنفيذ البرنامج. حين ما يبدأ البرنا مج إجراء الحدث Form1_Load ي تم تشغيله. هذا الجراء يقوم با ستدعاء الروت ين الفر عي DisplayTime فيقوم الروت ين الفر عي با ستدعاء الوظي فة GetTime وال تي بدور ها تقوم بإرجاع قي مة نص ية تم ثل الو قت الحالي للروت ين الفر عي DisplayTime الذي يقوم بعرض هذه القيمة مستخدما I صندوق الرسائل. 42
1.15.4 البارامترات مع الوقت سنحتاج أن نمد الجراءات ببعض البيانات. فمثل I الجراء PlaySound قد نحتاج أن يقوم بإ صدار صوت من ض من عدد من ال صوات. يم كن تحد يد أي من الصوات سوف يقوم بإصدارها الجراء PlaySound باستخدام البارامترات. تتشابه البارامترات مع المتغيرات. فهي لها نوع وأسم كما أنها تختزن البيانات مثلها مثل المتغيرات تماما. لكنها تختلف عن المتغيرات اختلفين أساسيين هما : يتم العلن عن البارامترات داخل العلن عن الجراء وليس بصورة مستقلة كما في حال المتغيرات. البارامترات تستخدم فقط داخل الجراءات المعلنة بداخلها. البارامترات يتم العلن عنها مع العلن عن الجراء داخل القواس التي تتبع أسم الجراء. تس تخدم الكل مة المحجوزة As لتعر يف نوع بيانات البارام تر ويكون البارام تر مسبوقا I بكلمة ByVal المحجوزة وهي الكلمة التي تضاف آليا I بواسطة Visual Basic إذا سهوت عن إضافتها. الشفرة التالية تبين العلن عن البارامترات في إعلن الجراء. Sub PlaySound(ByVal SoundFile As String, ByVal Volume ) As Integer ) My.Computer.Audio.Play(SoundFile, Volume End Sub وعند استدعاء مثل هذا الجراء تستخدم الشفرة التالية : ) PlaySound("Startup.wav", 1 1.15.4.1 تدريب : إنشاء وظيفة مصحوبة ببارامترات.50 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.51 قم بسحب ورمي عنصر التحكم Textbox مرتين فوق النموذج..52 قم بسحب عنصر تحكم Button ورميه فوق النموذج. 43
.53 أنقر نقرا A مزدوجا A فوق عنصر التحكم Button1 حتى تظهر نافذة.Code Editor.54 بعد End Sub في إجراء Button1_Click قم بإضافة الشفرة التالية. Function AddTwoNumbers(ByVal N1 As Integer, ByVal N2 As ) Integer As Integer Return N1 + N2 End Function.55 في إجراء Button1_Click أضف الشفرة التالية. ) Dim anumber As Integer = CInt(Textbox1.Text ) Dim bnumber As Integer = CInt(Textbox2.Text )) MsgBox(AddTwoNumbers(aNumber, bnumber.56 هذه الشفرة تقوم بالعلن عن متغيرين رقميين صحيحين وتقوم بتحويل القيم النصية المرتجعة من خاصية Text إلى أرقام صحيحة. يعقب ذلك تمرير القيم الصحيحة إلى الوظيفة AddTwoNumbers ثم عرض القيمة المرتجعة في صندوق رسالة..57 اضرب المفتاح F5 لتنفيذ البرنامج..58 قم بكتا بة رقم ين ثم اضرب المفتاح Button1 لتشا هد ر سالة تح مل حا صل ج مع العددين. 1.16 الحلقات الحلقات هي أدوات برمج ية تس اعد المس تخدم على أداء ع مل تكراري. وتد عم ل غة Visual Basic استخدام أنواع مختلفة من الحلقات. وفيما يلي نتعلم كيف يمكن استخدام كل نوع من هذه الحلقات على حدا. 1.16.1 حلقة For Next عند ما نقوم بكتابة برنامج قد نحتاج في بعض الحيان لتكرار خطوة ما. على سبيل المثال لنفترض أنك تقوم بكتابة برنامج يقوم بعرض سلسلة من العداد على الشاشة. في هذه الحالة قد تضطر إلى كتابة عدد كبير من السطور التي تقوم بنفس الفعل. 44
تستخدم حلقة For Next لمعالجة مثل هذه المسائل حيث تقوم بتكرار المهام عدد من المرات الذي يحدده المس تخدم سلفا. المثال التالي يبين ك يف يم كن ا ستخدام حل قة For.Next Dim i As Integer = 0 For i = 1 To 10 ) DisplayNumber(i Next تبدأ حل قة For- Next بمتغ ير عداد counter variable هو.i هذا المتغ ير هو الذي تس تخدمه الحل قة ل عد عدد المرات المطلوب في ها تنفيذ ها. الس طر التالي ) For i=1 to (10 ي خبر البرنا مج كم من المرات عل يه أن يكرر الحل قة أي أن على البرنا مج أن يقوم بتكرار الحل قة من ١ إلى.١٠ وعلى هذا ي تم تكرار الس طور المحص ورة ب ين For وح تى Next من ١ إلى.١٠ وعند بلوغ عشر مرات تتوقف الحلقة عن تكرار المهام. 1.16.1.1 تدريب : استخدام الحلقة For Next.59 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.60 قم بإدراج عنصري تحكم أحده ما من النوع TextBox وال خر من النوع Button على النموذج. أنقر نقرا A مزدوجا A فوق العنصر Button ليظهر.Code Editor في الحدث Button1_Clcik أكتب الشفرة التالية : Dim i As Integer = 0 = Dim NumberOfRepetitions As Integer ) CInt(Textbox1.Text For i = 1 To NumberOfRepetitions )" MsgBox("This line has been repeated " & i & " times Next قم بضرب المفتاح F5 لتنفيذ البرنامج. 45
قم بكتا بة ر قم في صندوق ال نص ثم أن قر المفتاح Button سوف يظ هر صندوق النصوص عدد مساوي للرقم الذي قمت بتخصيصه في صندوق النص. 1.16.2 حلقة Do-While و Do Until سوف نتعلم الن كيف يمكن استخدام الحلقة Do While ونظيرتها الحلقة Do.Until في الجزء السابق تعلمنا كيف يمكن استخدام الحلقة For Next لتكرار أداء مهمة عدد من المرات المحددة. ل كن ماذا إذا كان العدد المطلوب تكراره من المهام غ ير محدد بل يعتمد على تحقق شرط معين. تقوم الحلقتين Do-While و Do-Until بالتكرار مع الخذ في العتبار أن تتوقف عند تحقق شرط محدد سلفا. كمثال لنفترض أن نا نقوم بكتا بة برنا مج يقوم بج مع مجمو عة من الرقام لك نك ل تر غب أن يتجاوز حاصل جمع هذه السلسلة الرقمية المائة. يمكن عندئذ استخدام حلقة Do- While كما هو مبين في الشفرة التالية. Dim sum As Integer = 0 Do While sum < 100 sum = sum + 10 Loop في هذه الشفرة تقوم حلقة Do-While بتنفيذ الشفرة المحصورة بين Do While و Loop حتى يتحقق الشرط.sum<100 فإذا تحقق هذا الشرط توقفت الحلقة عن التكرار. ول تختلف الحلقة Do Until كثيرا I عن الحلقة Do While فالحلقة Do While تظل تتكرر ما دام الشرط الخاص بها صحيحا I أما الحلقة Do Until فهي تظل تتح قق ما دام الشرط غير صحيح فإذا تحقق الشرط توقفت الحلقة عن التكرار. 1.17 القرارات كثيرا I ما يحتاج المبرمج إلى اتخاذ قرارات تتحكم في أداء البرنامج كأن يختبر إذا ما كان مقام عمل ية القس مة مس اوي للص فر أم ل فإذا كان مس اويا I للص فر أ صدر ر سالة تف يد أن العملية الحسابية غير مقبولة أو إذا كان ل يساوي الصفر أستمر في أداء العملية الحسابية. 46
إن م ثل هذه القرارات يم كن معالج ته في Visual Basic با ستخدام العبارة If- Then وتوسعتها If Then Else والعبارة.Select Case فيما يلي سنتعلم كيف يمكن استخدام مثل هذه العبارات في اتخاذ القرارات. 1.17.1 العبارة If- Then تس تخدم العبارة If Then لتخاذ قرار بناء على تح قق شرط ما. الشفرة التال ية تبين طريقة استخدام.If Then Dim A As Integer = 7 Dim B As Integer = 4 If (A>B) Then )" MsgBox ("The Condition is true. End If في الشفرة الس الفة نقوم بتعر يف متغير ين من النوع الحقي قي ه ما A و B ونقوم بتخصيص قيمة لكل منهما على التوالي. ثم نستخدم العبارة If لختبار تحقق الشرط A>B إذا تح قق هذا الشرط تظ هر ر سالة تف يد بتح قق الشرط و هي الر سالة ال تي يظهر ها صندوق الرسالة بين Then و.End If إن قاعدة ا ستخدام If Then بس يطة للغا ية إذا If تح قق الشرط إذا Then ن فذ مجموعة العبارات اللحقة حتى.End If 1.17.2 التوسعة If-Then-Else يمكن استخدام العبارة If Then في صيغتها الموسعة بإضافة Else للتخيير بين قرار ين بناء على شرط. الشفرة التال ية تعت مد على الشفرة الس ابقة ب عد إضا فة ل ها التو سعة Else لها. Dim A As Integer = 7 Dim B As Integer = 4 If (A>B) Then )" MsgBox ("The Condition is true. Else )" MsgBox ("The Condition is false. End If 47
في هذه الحالة تصبح الصيغة لهذه الشفرة هي كالتالي : إذا If تحقق الشرط ) (A>B إذا Then I بطبا عة الر سالة The condition is true وإل Else أط بع العبارة The condition is false حيث لم يتحقق الشرط ثم قم بإنهاء العبارة.End If 1.17.2.1 تدريب : مقارنة عددين.61 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.62 قم بإدراج عنصري تحكم أحده ما من النوع TextBox وال خر من النوع Button على النموذج..63 أنقر نقرا A مزدوجا A فوق العنصر Button ليظهر.Code Editor.64 في الحدث Button1_Clcik أكتب الشفرة التالية : ) Dim A As Integer = CInt(TextBox1.Text ) Dim B As Integer = CInt(TextBox2.Text If (A > B) Then )" MsgBox(A & " is the bigger number Else )" MsgBox(B & " is the bigger number End If.65 قم بضرب المفتاح F5 لتشغيل البرنامج..66 قم بتخصيص قيمتين رقميتين في صندوقي النصوص ثم أنقر المفتاح Button1 لتنفيذ عملية المقارنة. 1.17.3 العبارة Select Case عند ما يكون عدد القرارات يز يد عن قرار ين يص بح ا ستخدام العبارة If Then مجهدا.I لذلك تقدم Visual Basic خيارا I آ خر للتعا مل مع القرارات المتعددة هو العبارة.Select Case تستخدم العبارة Select Case لختيار قرار من بين عدة قرارات بناء على شرط منطقي. الشفرة التالية تبين كيف يمكن استخدام العبارة.Select Case 48
Dim A As Integer = 1 Select Case A Case 1 )" MsgBox("White Case 2 )" MsgBox("Black Case 3 )" MsgBox("Red End Select يمكن قراءة هذه الشفرة كما يلي. أختر على أساس Select Case قيمة A فإذا كانت (A=1 (Case 1 فقم بإظهار الرسالة White أو إذا كانت قيمة (A=2 (Case 2 فقم بإظهار الرسالة Black أو إذا كانت قيمة (A=3 (Case 3 فقم بإظهار الرسالة.Red ثم قم بإنهاء العبارة.End Select 1.17.4 التوسعة Select Case Case Else تعمل التوسعة Case Else مع العبارة Select Case عمل يشابه عمل Else مع عبارة If فهي تقدم البديل في حالة عدم تحقق أي من الشروط التي تختبرها العبارة Select.Case الشفرة التالية تقدم فكرة أوضح عن استخدام التوسعة.Case Else Dim A As Integer = 1 Select Case A Case 1 )" MsgBox("White Case 2 )" MsgBox("Black Case 3 )" MsgBox("Red Case Else )" MsgBox("Please choose 1,2 or 3 End Select في هذه الشفرة تص بح الضا فة هي كال تي في حال لم يتح قق اي من الشروط السابقة Case Else قم بطباعة العبارة.Please choose 1,2 or 3 49
1.17.4.1 تدريب : الختيار من بين عدة قيم.67 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.68 قم بإدراج عنصري تحكم أحده ما من النوع TextBox وال خر من النوع Button على النموذج..69 أنقر نقرا A مزدوجا A فوق العنصر Button ليظهر.Code Editor.70 في الحدث Button1_Clcik أكتب الشفرة التالية : Select Case A Case 1 )" MsgBox("White Case 2 )" MsgBox("Black Case 3 )" MsgBox("Red Case Else )" MsgBox("Please choose 1,2 or 3 End Select.71 قم بضرب المفتاح F5 لتشغيل البرنامج..72 قم بتخص يص قي مة رقم ية في صندوق النص وص ثم أن قر المفتاح Button1 لتنف يذ عملية المقارنة. 1.18 معالجة الخطاء سنقوم الن بتعلم ك يف يمكن نا معال جة الخطاء في شفرة البرنا مج. ح تى أفض ل البرا مج أحيا نا ما ين تج عن ها أخطاء. ب عض هذه الخطاء هي عبارة عن عيوب في شفرة البرنامج يمكن اكتشافها وتحديدها. بعضها الخر غير ناتج عن البرنامج مثل I ولكن عن بيئة التشغيل كأن يحاول البرنامج فتح ملف مفتوح في برنامج آخر. في مثل هذه الحالت يمكن التنبؤ بمثل هذه الخطاء وللكن ل يمكن منعها. وكمبرمج فمن ضمن واجباتك التنبؤ بمثل هذه الخطاء وتكيف برنامجك للتعامل معها. 50
1.18.1 الخطاء من النوع Run Time يطلق على الخطأ الذي يحدث أثناء تشغيل البرنامج السم.Run Time Error هذا النوع من الخطاء يحدث عند ما يحاول البرنا مج أن يقوم بع مل لم يص مم البرنا مج من أجله. مثل I أن يقوم البرنامج بعملية غير مقبولة Illegal Operation كأن يقوم بتحويل نص غير رقمي إلى متغير رقمي في مثل هذه الحالت تظهر أخطاء الـ.Run Time عند ما ي قع هذا النوع من الخطاء أثناء التطو ير في بيئة Visual Basic ينش أ Visual Basic ما يس مى بال ستثناء Exception و هو ما يس مح لل مبرمج أن يتعا مل مع الخطأ عن طريق النظر إلى الشفرة داخل البرنامج ومعالجة الخطأ. إذا لم توجد شفرة معيبة فإن البرنا مج سوف يتو قف وعندئذ ستحتاج إلى إعادة تشغيله مره أخرى. و في م ثل هذه الحالت غالبا I ما يحدث ف قد في البيانات ال تي يدير ها البرنا مج لذلك يفض ل الب حث عن هذه الخطاء أيا I كان موضعها وإزالتها. 1.18.2 العبارة Try Catch Finally يمك نك ا ستخدام العبارة Try Catch Finally لمعال جة الخطاء من النوع Run Time في شفرتك. منطق هذه العبارة بسيط للغاية فيمكنك أن تجرب Try جزء من الشفرة فإذا حدث أي استثناء في الشفرة ينتقل البرنامج إلى السطور التالية لـ Catch ويقوم بتنف يذ هذه الس طور. وب عد النتهاء من تنف يذ هذه الشفرة فإن أي شفرة ب عد Finally ل بد من تنفيذها. الشفرة التالية تبين منطق هذه العبارة. Try ' Code here attempts to do something. Catch ' If an error occurs, code here will be run. Finally ' Code in this block will always be run. End Try بدا ية الشفرة اللح قة ل ـ Try ي تم تنفيذ ها. إذا نفذت هذه الشفرة دون أخطاء يق فز البرنامج فوق Catch وما يلحقها من شفرة ويتم تنفيذ الشفرة اللحقة لـ.Finally إذا حدث خطأ في الشفرة اللحقة لـ Try ينتقل البرنامج للشفرة اللحقة لـ Catch ثم يقوم بتنفيذ الشفرة اللحقة لـ.Finally 51
1.18.2.1 تدريب : استخدام Try- Catch- Finally.73 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.74 قم بإدراج عنصري تحكم أحده ما من النوع TextBox وال خر من النوع Button على النموذج..75 أنقر نقرا A مزدوجا A فوق العنصر Button ليظهر.Code Editor.76 في الحدث Button1_Clcik أكتب الشفرة التالية : Try ) Dim anumber As Double = CDbl(Textbox1.Text ) MsgBox("You entered the number " & anumber Catch )" MsgBox("Please enter a number. Finally )"? MsgBox("Why not try it again End Try قم بضرب المفتاح F5 لتشغيل البرنامج. قم بتخص يص قي مة رقم ية في صندوق النص وص ثم أن قر المفتاح Button1 لتنفيذ عملية الختبار. 52
بناء واجهات التشغيل واج هة التشغ يل User Interface هي ذلك الجزء من البرنا مج الذي سوف يراه مس تخدم البرنا مج ع ند تشغيله. عادة ما تتكون واج هة التشغ يل من نافذة رئيس ية أو نموذج وعدد من عنا صر التح كم م ثل المفات يح وخانات إدخال النص وص و ما إلى ذلك. البرا مج المطورة بـ Visual Basic التي تعمل على حاسوبك يطلق عليها أسم تطبيقات نماذج النوافذ Windows Forms Applications ويس تخدم لبناء واجهات تشغيل ها عنا صر.Windows Forms في هذا الفص ل نتعلم ك يف نقوم ببناء واج هة التشغ يل با ستخدام أك ثر عنا صر تح كم Windows Forms استخداما. 1.19 واجهة التشغيل User Interface سنتعلم هنا ما هي واجهة التشغيل (User Interface (UI وما هي عناصر التحكم Controls وكيف يمكن إضافة عنصر التحكم إلى واجهة التشغيل. في بدايات الحواسيب كان مستخدمي البرامج يتعاملون مع برامجهم من خلل سطر الوامر.Command Line كان البرنامج يبدأ ثم ينتظر تلقي البيانات من المستخدم قبل أن يستمر. معظم البرامج التي تستخدمها اليوم تشتغل من خلل نافذة أو أكثر لتسمح لمستخدمها بأن يتعا مل مع البرنا مج من خلل الضرب على لو حة المفات يح أو بالن قر على المفات يح أو الختيار من القوائم وما إلى ذلك. سنقوم الن برحلة الغرض منها تعلم كيف نقوم ببناء واجهة تشغيل لبرامجنا تعمل من خلل النوافذ. 1.19.1 بناء النماذج Forms النماذج Forms هي البنى الساسية لواجهة التشغيل. كل نموذج في البرنامج يظهر للمس تخدم في صورة نافذة.Window ع ند الع مل في بيئة التطو ير المتكاملة ل ـ Visual (Basic (Visual Basic Integrated Development Environment IDE يم ثل النموذج لوحة التصميم التي تستخدمها لتصميم واجهة تشغيل برنامجك بنفس الطريقة التي تستخدم برنامج Windows Paint لرسم الشكال. 53
عناصر التحكم تستخدم فوق لوحة التصميم هذه لبناء مظهر الواجهة. عنصر التحكم ين ظر إل يه ككائن محدد سلفا I المظ هر والس لوك. مثال على ذلك المفتاح Button له مظ هر وسلوك معينين فعند النقر عليه يتغير شكله ليبين أن نقر. ل كل عنص ر تح كم تقد مه Visual Basic وظي فة محددة. مثل I عنص ر التح كم TextBox يستخدم لدخال النصوص أما عنصر التحكم PictureBox فيستخدم لعرض الصور. تقدم Visual Basic لمستخدميها نحو خمسين عنصر تحكم مختلف إضافة إلى أن ال مبرمج يمك نه أن يقوم بتص ميم عنا صر تحك مه الخا صة وال تي يطلق علي ها عنا صر تح كم المستخدم.User Controls عند تصميم واجهة التشغيل كل ما تحتاجه هو أن تقوم بسحب Drag عنصر التحكم من الـ Toolbox ثم رميه Drop فوق المكان المناسب على النموذج بعد ذلك يمكنك أن تغ ير موض عه وحج مه فوق النموذج ب ما يلءم تص ورك عن واج هة تشغ يل برنام جك. ك ما يمك نك تغي ير مظ هر عنا صر التح كم عن طر يق تغي ير خص ائصها في نافذة الخص ائص.Properties تمنح نافذة الخصائص العديد من الخصائص القيمة التي تساعد المبرمج على تحو ير مظ هر عنا صر التح كم فمثل I النماذج وعنا صر التح كم يكون ل ها لون خلف ية يم كن ضبطه من الخاصية المسماة.BackColor يم كن أيضا I ا ستخدام الخص ائص لتعر يف سلوك النموذج أو عنص ر التح كم. مثل الخاصية ShowInTaskbar للنموذج تحدد ما إذا كان النموذج سوف يظهر في شريط مهام Windows أم ل عند تشغيل البرنامج. 1.19.1.1 تدريب : تغيير خصائص النموذج.77 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.78 أنقر فوق النموذج لتختاره موضوع عملك..79 في نافذة Properties قم بتغيير خاصية Text لتصبح My First Form ثم أضرب مفتاح Enter في لوحة المفاتيح هل تلحظ تغير النص المكتوب في شريط عنوان Title Bar النموذج من Form1 إلى.My First Form 54
.80 في نافذة الخص ائص قم بتغي ير خا صية BackColor إلى لون آ خر باختيار لو من القائمة المنسدلة ليتغير لون خلفية النموذج. 1.19.1.2 تدريب : إضافة عناصر التحكم إلى النموذج سنتابع في هذا التدر يب بناء واج هة تشغ يل فوق النموذج الذي أعددناه في التدر يب السالف..81 من Toolbox قم بسحب عنصر التحكم Button ورميه فوق النموذج ثم كرر العمل مع عناصر التحكم TextBox و Label و.CheckBox.82 أنقر فوق الـ Button لتختاره ثم قم بسحبه فوق النموذج مغيرا A من موقعه..83 كرر العملية لباقي عناصر التحكم..84 أنقر فوق الـ Button لتختاره ثم أنقر وأسحب المربع البيض الصغير المثبت إلى الحافة السفلية للمفتاح لتغيير حجمه..85 حاول أن تخ تبر خص ائص عنا صر التح كم الخرى م ثل Font و BackColor و ForeColor و.Text.86 قم بضرب المفتاح F5 لتشغيل البرنامج. هل تلحظ الهيئة الجديدة للبرنامج. 1.20 التفاعل مع المستخدم : استخدام المفاتيح فيما يلي نتعلم كيف نضيف عنصر التحكم Button إلى النموذج وكيف نقوم بتغيير مظهره وكيف نكتب شفرة يتم تنفيذها عندما ننقر عليه. تعتبر أسهل وسيلة لكي يتفاعل المستخدم مع البرنامج هي المفاتيح.Buttons فمثل كث ير من البرا مج تحتوي مفتاح Exit لنهاء البرنا مج. ك ما رأ يت سلفا I يأ خذ المفتاح مظ هر و سلوك المفات يح العاد ية المثب تة إلى الجهزة مثل. بالضا فة إلى المظ هر والس لوك للمفات يح مجموعة من الحداث Events المعرفة سلفا I والتي تستخدم لتنفيذ الشفرات. 55
1.20.1 استخدام المفاتيح المفاتيح بصورة عامة لها مظهر مستطيل بارز فوق النماذج. لكن هذا المظهر يمكن تغييره با ستخدام العد يد من الخص ائص. أو ضح هذه الخص ائص هي خا صية Text وال تي تحدد النص الذي سوف يعرض على المفتاح وهذا النص سيعرض بخط يتم التحكم فيه من خا صية.Font خا صية BackColor تحدد لون المفتاح بين ما تحدد خا صية ForeColor لون النص فوق المفتاح. عند ما ين قر مس تخدم البرنا مج مفتاحا I فإن المفتاح يبدأ تشغ يل شفرة الحدث.Click عند وقوع حدث Event فإن الشفرة المرفقة في هذا الحدث يبدأ تنفيذها. يمكنك كتابة الشفرة التي سوف يجرى تنفيذها بواسطة بناء عامل الحدث.event handler عامل الحدث Event handler هو طريقة Method يتم تنفيذها عند وقوع الحدث. حين ما ين قر المس تخدم فوق المفتاح حدث Click للمفتاح يكون له.event handler و في موضع لحق سنتعلم كيف نتعامل مع عامل الحدث.Event handler 1.20.1.1 تدريب : استخدام المفتاح.87 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.88 قم بسحب Button من Toolbox ورميه فوق الـ.Form.89 في نافذة الخصائص قم بتغيير خاصية Text لتصبح?What time is it ثم أضرب مفتاح Enter من لوحة المفاتيح..90 هل لحظت أن النص أكبر من المفتاح أختار الخاصية AutoSize ثم أضبط قيمتها لتصبح True يتغير حجم المفتاح ليناسب حجم النص..91 أنقر مرتين فوق المفتاح لتظهر نافذة.Code Editor.92 في عامل الحدث Event handler أكتب الشفرة التالية. ) MsgBox("The current time is " & Now.ToShortTimeString 56
.93 أضرب المفتاح F5 ليتم تشغيل البرنامج أنقر المفتاح لتظهر لك رسالة تحمل التوقيت الن. 1.21 استخدام النصوص سوف نتعلم الن كيف ية ا ستخدام عنص ري التح كم Label و TextBox لعرض النصوص وإدخال البيانات النصية من مستخدم البرنامج. واحدة من أ سهل الطرق ل ستلم وعرض البيانات في البرنا مج هي من خلل النص وص. ح يث يمك نك عرض بيانات حول وظائف عنا صر واج هة برنام جك أو تس لم البيانات من المس تخدم ل ستخدامها في برنام جك. تقدم Visual Basic عنص ري التح كم Label و TextBox لداء هذه المهام. 1.21.1 عرض النصوص في عنصر التحكم Label عنص ر التح كم Label هو عنص ر تح كم رئيس ي لعرض النص وص. يظ هر عنص ر التحكم Label فوق النموذج أثناء التصميم كنص محاط بإطار مستطيل. يكون لون عنصر التح كم Label هو ن فس لون النموذج لذلك يظ هر أثناء تشغ يل البرنا مج مجرد نص فوق النموذج. حيث أن وظيفة عنصر التحكم Label الساسية هي عرض النص فإن الخصائص الهم لعنصر التحكم Label هي الخصائص التي تحدد مظهره. خاصية Text هي المسئولة عن النص المعروض في عنص ر التحكم.Label خاصية Font مسئولة عن تحديد مظهر ال خط المس تخدم في إظهار ال نص في عنص ر التح كم.Label الخا صية ForeColor يحدد لون النص نفسه أما الخاصية BackColor فتحدد لون المنطقة المحيطة بالنص. 1.21.2 تسلم النص عبر عنصر التحكم TextBox في حالة ما إذا رغ بت في عرض وا ستلم ال نص يطرح Visual Basic عنص ر التحكم TextBox لداء هذه المهمة. كما في حالة عنصر التحكم Label الخصائص الهم بالنسبة لعنصر التحكم TextBox هي تلك المرتبطة بمظهره. الخاصية Text تحدد النص المعروض في عنص ر التح كم. الخا صية Multiline تحدد ما إذا كان عنص ر التح كم TextBox قا بل لتس لم نص وص وعرض ها على أك ثر من سطر ح يث تأ خذ هذه الخا صية 57
القيمة False لعرض وتسلم سطر واحد من البيانات أو القيمة True لعرض وتسلم أكثر من سطر من البيانات. 1.21.2.1 تدريب : استخدام عنصري التحكم Label و TextBox.94 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.95 قم بسحب عناصر التحكم Label و TextBox و Button من Toolbox و رميهم فوق النموذج..96 أخ تر عنص ر التح كم Label ثم أذ هب إلى نافذة Properties و قم بتغي ير قي مة الخاصية Text إلى.Enter your name and click the button.97 أنقر نقرا A مزدوجا A فوق عنصر التحكم Button لتظهر نافذة.Code Editor.98 قم بكتابة الشفرة التالية في عامل الحدث Button1_Click ) MsgBox("Your Name is " & Textbox1.Text أضرب المفتاح F5 لتشغيل البرنامج. قم بكتابة أسمك في خانة النص ثم أنقر المفتاح Button لتظهر رسالة نص تحتوي على أسمك. 1.22 بناء عامل حدث Event Handler سوف نتعلم الن كيفية بناء عامل حدث.Event Handler فيما سبق تعرفنا أن عناصر التحكم لها خصائص Properties وطرق Methods وأحداث Events وتستخدم عناصر التحكم هذه لنشاء واجهة التشغيل لبرامجك. عندما يحدث شئ متوقع بالنسبة لعنصر التحكم نقر على مفتاح مثل ã يقوم عنصر التح كم بإطلق الحدث Event بمع نى أ نه يقوم بإر سال إشارة إلى البرنا مج تعل مه بأن هناك شئ م هم بالنس بة له قد حدث. يقوم البرنا مج ب عد ذلك با ستكشاف ما إذا كان هناك أي طرق معر فة للع مل ع ند وقوع هذا الحدث. م ثل هذه الطرق تس مى عا مل الحدث Event.Handler 58
يمكنك إنشاء عوامل الحداث للعديد من أحداث عناصر التحكم. فيما يلي سنقوم ببناء عوامل أحداث لمعالجة أحداث MouseEnter و MouseLeave الخاصة بعنص ر التحكم Button وهي الحداث التي تقع عند مرور الفأرة فوق عنصر التحكم. 1.22.1 تدريب : معالجة حدث MouseEnter.99 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK قم بسحب عنصر تحكم Button من Toolbox ورميه فوق النموذج. قم بتغيير قيمة خاصية AutoSize لعنصر التحكم لتصبح.True من قائمة View أختار Code تظهر نافذة Code Editor لحظ الصندوقين المنسدلين في أعلى نافذة.Code Editor الصندوق اليسر يضم كافة عناصر التحكم المستخدمة في تصميم الواجهة. والصندوق اليمن يضم كافة الحداث المتاحة لعنصر التحكم المختار من الصندوق اليمن. في الصندوق اليمن أختار.Button1 في الص ندوق الي من أختار الحدث MouseEnter يظ هر عا مل الحدث Event Handler المسمى Button1_MouseEnter في نافذة.Code Editor قم بكتابة الشفرة التالية في الحدث. " Button1.Text = "The Mouse has entered قم بضرب المفتاح F5 من لوحة المفاتيح قم الن بتمرير الفأرة فوق المفتاح ولحظ تغير نص المفتاح. 1.22.2 إضافة عامل حدث آخر لعلك لح ظت في المثال الس ابق أن ال نص ال صلي للمفتاح ل يعود ك ما كان عند ما تنزاح الفأرة من فوقه. إذا كنت ترغب في تغيير النص بمجرد انزياح الفأرة لبد من إضافة عامل حدث آخر هو عامل الحدث.MouseLeave 59
1.22.2.1 تدريب : إضافة الحدث MouseLeave.100 من صندوق الحداث إلى اليسار أختار الحدث.MouseLeave.101 في عامل الحدث Button1_MouseLeave أضف الشفرة التالية : " Button1.Text = "The mouse has left.102 أضرب المفتاح F5 وجرب البرنامج. 1.22.3 مشاركة عامل الحدث في ما يلي سوف نتعلم ك يف نقوم عا مل حدث مشترك يتعا مل مع أحداث لك ثر من عنص ر تح كم. في ما سبق تعلم نا ك يف نك تب شفرة تس تجيب لحدث MouseEnter وحدث MouseLeave لعنص ر التحكم.Button ماذا يحدث إذا كان لدينا أكثر من عنصر تحكم Button وأ نت تر يد أن تعرض ن فس الر سالة لجم يع هذه العنا صر. في هذه الحالة يم كن كتا بة ن فس شفرة عا مل الحدث ل كل عنص ر من عنا صر التح كم ل كن ولحس ن ال حظ تقدم Visual Basic خيار أفضل. لو ك نت تفحص ت مجمو عة طرق عوا مل الحداث للحدث MouseEnter ك نت ستلحظ أن تعريف الطريقة Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter يحتوي على جزء هام هو Handles Button1.MouseEnter إن الكلمة المحجوزة Handles تفيد عامل الحدث عن أي الحداث التي يجب عليه أن يقوم بمعالجتها. لمشار كة عا مل حدث ب ين أك ثر من عنص ر تح كم فإ نه يلز مك أن تض يف أ سماء عنا صر تح كم إضاف ية وأ سم الحدث الذي تر غب في معالج ته. فمثل I إذا كان هناك عنص ري تح كم Button وتر غب في أن تس تخدم ن فس عا مل الحدث له ما فإن الكل مة المحجوزة Handles سوف تظهر في الشفرة كما يلي : Handles Button1.MouseEnter, Button2.MouseEnter. 60
الن لد يك طري قة Method واحدة لمعال جة الحدث MouseEnter لكل عنص ري التحكم. لكن كيف يمكن لعامل الحدث أن يعرف أي عنصري التحكم هو من أطلق الحدث. إذا ألق يت مرة أخرى الن ظر على إعلن Method سوف تل حظ الكل مة المحجوزة ByVal.sender As Object إن الكل مة المحجوزة Sender تف يد عا مل الحدث عن الكائن عنصر التحكم الذي أطلق الحدث. 1.22.3.1 تدريب : المشاركة في عامل حدث هذا التدر يب يعت مد على التدر يب الس ابق ح يث سنقوم بتعد يل الواج هة والشفرة الخاصة بعناصر التحكم..103 من Toolbox قم بسحب Button جديد وإضافته إلى الـ.Form.104 قم بالنقر مرتين فوق Button1 لفتح نافذة.Code Editor.105 في الحدث MouseEnter قم بتعد يل هذا الجزء من العلن عن الطري قة Handles Buuton1.MouseEnter ليصبح Handles Button1.MouseEnter,.Button2.MouseEnter.106 قم بحذف الشفرة الموجودة دا خل الطري قة Method لعا مل الحدث Button1_MouseEnter واستبدالها بالشفرة التالية. If sender.equals(button1) Then " Button1.Text = "The mouse has entered Button1 Else " Button2.Text = "The mouse has entered Button2 End If.107 الن قم بضرب المفتاح F5 وأختبر البرنامج. 1.23 استخدام مربعات التأشير ومفاتيح الراديو في ما يلي سنتعلم كيف يه ا ستخدام مربعات التأش ير Check Boxes ومفات يح الراد يو Radio Buttons وهي عناصر التحكم المسئولة عن تلقي اختيارات مستخدمي البرامج. 61
1.23.1 مربع التأشير Check Box عندما تقوم بإنشاء واجهة تشغيل لبرنامجك عادة ما تحتاج أن تقدم اختيارات. مثل I أفترض أنك تقوم بكتابة برنامج لتلقي طلبات مطعم بيتزا ربما كنت تريد أن تجعل مستخدم برنام جك أن يختار من ب ين عدد من أ صناف البيتزا. عنص ر التح كم CheckBox يقدم أداة جيدة يمكن للمستخدم أن يستخدمها في تحديد خياراته. يتكون عنصر التحكم CheckBox من نص عنوان ومربع حيث يمكن للمستخدم أن يض ع إشارة المواف قة. عند ما ين قر المس تخدم فوق مر بع التأش ير تظ هر إشارة المواف قة في المربع. إذا تم التأشير على المربع مرة ثانية فإن إشارة الموافقة تختفي. إن حالة مربع التأشير من ح يث هو يح مل إشارة المواف قة أو ل يم كن التعرف علي ها من خلل الخا صية.CheckBox.Checked لو أن المربع يحوي الشارة فإن هذه الخاصية تصبح True أما إذا كان ل يحمل هذه العلمة فإن قيمة الخاصية تصبح.False 1.23.1.1 تدريب : استخدام مربع التأشير.108 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK قم بسحب عنصر التحكم CheckBox من ToolBox ورميه فوق النموذج وكرر هذا الجراء مرتين إضافيتين. قم بسحب عنصر تحكم Button من Toolbox ورميه فوق النموذج. أختار عنص ر التح كم CheckBox1 من فوق النموذج ثم اذ هب إلى نافذة الخص ائص وعدل الخا صية Text لتص بح Pepperoni ثم كرر الجراء لعنص ر التحكم CheckBox2 جاعل A خاصية Text له هي Sausage ونفس المر لعنصر التحكم الذي تصبح خاصية Text له هي.Mushrooms في خصائص Button1 أجعل الخاصية Text هي.Order Pizza أنقر نقرا A مزدوجا A فوق عنصر التحكم Button1 لتظهر نافذة Code Editor ثم قم بكتابة الشفرة التالية : 62
"" = Dim toppings As String If CheckBox1.Checked = True Then " toppings &= "Pepperoni End If If CheckBox2.Checked = True Then " toppings &= "Sausage End If If CheckBox3.Checked = True Then " toppings &= "Mushrooms End If If toppings <> "" Then & " MsgBox("Your pizza has the following toppings: ( toppings End If قم بضرب F5 ثم أختار أحد الخيارات الثلثة وأنقر المفتاح.Order Pizza 1.23.2 مفتاح الراديو Radio Button تعلم نا ك يف يم كن أن نقوم بالس ماح لمس تخدمي برامج نا بتحد يد إختيارت هم. ل كن ماذا إذا كان علي نا أن نج عل المس تخدم يقوم بإختيار وا حد ف قط من ض من مجمو عة خيارات. في هذه الحالة فإن عنصر التحكم المثالي لهذه الوظيفة هو عنصر التحكم.RadioButton وعلى عكس مربعات التأشير غالبا I ما تعمل مفاتيح الراديو )والتي يطلق عليها أحيانا أسم مفاتيح الخيارات (Option Buttons كمجموعة. في هذه المجموعات يكون اختيار أي منها بمثابة عدم اختيار باقي الخيارات. يم كن مثل I أن تس تخدم مجمو عة من مفات يح الراد يو لتس مح لمس تخدم برنا مج طلبات البيتزا بأن يحدد ما إذا كان ير يد صوص عادي أو صوص حار فوق البيتزا. وك ما في حالة مر بع التأش ير يم كن التعرف على ما إذا كان مفتاح الراد يو يح مل عل مة المواف قة أم ل من خلل الخاصية.RadioButton.Checked 1.23.2.1 تدريب : إضافة مفاتيح الراديو استكمال على التطبيق السابق نقوم بتنفيذ الجراءات التالية : 63
.109 قم بسحب عنصر التحكم RadioButton من Toolbox ورميه فوق الـ Form مرتين..110 من نافذة الخص ائص أختار خا صية Text لعنص ر التح كم RadioButton1 وأجعلها.Regular Sauce من نافذة الخصائص أختار خاصية Text لعنصر التحكم RadioButton2 وأجعلها.Hot Sauce قم بالنقر مرتين فوق عنصر التحكم Button1 لتظهر نافذة.Code Editor أضف هذه الشفرة أسفل الشفرة التي قمنا بكتابتها التدريب السابق. If RadioButton1.Checked = True Then )" MsgBox("You chose regular sauce Else )" MsgBox("You chose spicy sauce End If قم بضرب المفتاح F5 لتشغيل واختبار البرنامج. 1.23.3 استخدام أكثر من مجموعة من مفاتيح الراديو سنتعلم الن كيف ننشئ عدد من مجموعات مفاتيح الراديو فوق نفس النموذج. ففيما سبق تعلمنا أن ننشئ مجموعة من مفاتيح الراديو التي تقدم مجموعة من الخيارات للمستخدم. ماذا يحدث عند ما نر غب في تقد يم مجموعت ين أو أك ثر من الخيارات. إذا أضف نا مفات يح الراد يو ال تي تم ثل مجموعات الخيارات كل ها فوق ن فس النموذج سنجد أن ها تتص رف كأن ها مجموعة واحدة أي أن اختيار أي منها يعني عدم اختيار الباقين. يقدم Visual Basic مجموعة من عناصر التحكم التي يطلق عليها أسم الحاويات Containers وال تي تع مل بمثا بة حاو ية لعنا صر التح كم. بإضا فة أي من الحاويات إلى النموذج ووضع مجموعة من مفاتيح الراديو بداخلها فإن هذه المجموعة تصبح مستقلة عن غيرها من مفاتيح الراديو الخارجة عن الحاوية. الحاو ية الك ثر شيوعا I هي عنص ر التح كم GroupBox وعنص ر الح كم.Panel الفارق الرئيسي بينهما هو أن عنصر التحكم GroupBox له حافة مرئية حوله ول يوجد 64
مثل هذه الحافة حول عنصر التحكم.Panel عند استخدام حاوية لتجمع مجموعة من مفاتيح الراد يو فإن عنص ر التح كم GroupBox هو الخيار الفض ل لن حاف ته تبين لمس تخدم البرنا مج أن هذه المجمو عة من المفات يح ال تي يحتوي ها هي مجمو عة واحدة ل يمك نه إل أن يختار إحداها فقط. 1.23.3.1 تدريب : استخدام عنصر التحكم GroupBox كحاوية استكمال للمشروع السابق نقوم بالجراءات التالية :.111 من Toolbox قم بسحب GroupBox ورميه فوق النموذج..112 من نافذة الخصائص قم بتغيير خاصية Text لعنصر التحكم GroupBox لتصبح.Select a crust.113 أختر الـ GroupBox فوق النموذج ثم قم بسحب RadioButton من Toolbox ورم يه فوق ال ـ GroupBox وكرر هذه الخطوة ليص بح عند نا مفتا حي راد يو فوق الحاوية..114 في نافذة الخصائص قم بتغيير خاصية Text لعنصري التحكم RadioButton1 و RadioButton2 على التوالي لتصبح Thin crust و.Thick crust.115 أن قر مرت ين فوق المفتاح Order Pizza لتظ هر نافذة.Code Editor أ ضف هذه الشفرة أسفل الشفرات الموجودة في عامل الحدث.Button1_Click If RadioButton3.Checked = True Then )" MsgBox("You chose a thin crust Else )" MsgBox("You chose a thick crust End If.116 أضرب المفتاح F5 وقم بتجربة البرنامج. 1.24 استخدام الصور فيما يلي نتعلم كيفية استخدام عنصر التحكم PictureBox لعرض الصور واستخدام الصورة كخلفية للنموذج. 65
1.24.1 عنصر التحكم PictureBox هناك عدة طرق لعرض الص ور في Visual Basic أهم ها هو عنص ر التح كم.PictureBox يعمل عنصر التحكم PictureBox بمثابة حاوية للصور ويمكنك أن تختار الص ورة ال تي سوف ي تم عرض ها في ها من خلل الخا صية.Image هذه الخا صية يم كن ضبطها من خلل نافذة الخصائص أو يمكنك كتابة شفرة لتحميلها أثناء عمل البرنامج. من خص ائص عنص ر التح كم PictureBox المفيدة الخا صية AutoSize وال تي تعني أن عنصر التحكم PictureBox من الممكن أن يتغير حجمه ليتوافق مع حجم الصورة. وكذلك الخا صية SizeMode وال تي يمكن ها أن تس تخدم لض بط و ضع الص ورة في عنص ر التحكم PictureBox فتسمح بتغيير أبعاد الصورة للتوافق مع عنصر التحكم. ق بل إضا فة عنص ر التح كم PictureBox ي جب إضا فة الص ورة إلى المشروع كمورد.Resource وبمجرد إضافة المورد إلى المشروع يمكنك استخدامه أكثر من مرة. 1.24.1.1 إضافة الصورة كمورد Resource.117 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK في نافذة Solution Explorer أ نق مرت ين فوق أ سم المشروع لتنف تح نافذة Project Designer أنظر شكل.4-16 شكل :16-4 نافذة.Project Designer 66
أختار التبو يب Resource من النافذة Project Designer أن ظر شكل.4-17 شكل :17-4 التبويب.Resource أنقر على السهم المجاور لـ Add Resource وأختار منها Add Existing File أنظر شكل.4-18 شكل :18-4 إضافة مورد خارجي. أستخدم النافذة التي سوف تظهر للختيار صورة. كرر الخطوة ٤ و ٥ مرة أخرى ليص بح عندك صورتين من ض من موارد المشروع ظاهرتان في نافذة.Solution Explorer 1.24.1.2 تدريب : عرض الصورة باستخدام عنصر التحكم PictureBox.118 أختار من Solution Explorer النموذج Form1 ثم أختار من قائ مة View الختيار.Designer 67
.119 قم بسحب عنصر تحكم PictureBox من Toolbox ورميه فوق النموذج..120 في نافذة الخص ائص أن قر فوق المفتاح... المجاور للخا صية Image لتظ هر نافذة.Select Resource.121 أختر أحدى الصورتين..122 أختار خاصية SizeMode وأضبطها لتصبح.AutoSize.123 أن قر مرت ين فوق عنص ر التح كم PictureBox لتنف تح نافذة Code Editor على عامل الحدث.PictureBox1_Click.124 بفرض أن الص ورة الثان ية ال تي أضفت ها إلى الموارد أ سمها MyPicName قم بكتابة الشفرة التالية في طريقة الحدث. PictureBox1.Image = My.Resources.MyPicName.125 أضرب المفتاح F5 لتنفيذ البرنامج أنقر فوق الصورة وأنظر كيف تتغير الصورة. 1.24.2 استخدام الصورة في خلفية النموذج يم كن ا ستخدام الص ورة كخلف ية للنموذج عوضا I عن ا ستخدام اللوان. في التدر يب التالي نتعلم معا I كيف نستخدم الصورة لتصبح هي خلفية النموذج. 1.24.2.1 تدريب : استخدام الصورة في خلفية النموذج.126 من نافذة Solution Explorer أختار Form1.vb و من قائ مة View أختار.Designer.127 أختار النموذج بالنقر خارج عنصر التحكم.PictureBox.128 في نافذة الخصائص أن قر المفتاح... للخا صية BackgroundImage حتي تنف تح نافذة.Select Resource.129 أختار أحدى الصورتين في الموارد ثم أنقر.OK.130 أختار خاصية BackgroundImageLayout ثم أضبط قيمتها لتصبح.Stretch 68
.131 أضرب المفتاح F5 لتشاهد مظهر البرنامج الجديد. 1.25 القوائم سنتعلم الن كيف ننشئ القوائم ونكتب الشفرات التي يتم تنفيذها عند اختيار القوائم. تم ثل القوائم طري قة سهلة ومعتادة تس مح للمس تخدمين بالو صول إلى الوظائف المختل فة برنامجك. 1.25.1 إضافة القوائم إن إضا فة القوائم إلى البرا مج با ستخدام Visual Basic هو ع مل بس يط. يمك نك ا ستخدام عنص ر التح كم MenuStrip الذي يظ هر كمر بع يح مل الكلمات Type Here ليظهر في الجانب اليسر العلى من النموذج. حيث يمكنك أن تنقر هذا المربع وتكتب بداخله أسم القائمة. عند ما نقوم بض بط أ سم قائ مة يم كن أن تظ هر قوائم فرع ية تح ته وإلى يم ين القائ مة الولى لتس مح لل مبرمج أن يقوم بتص ميم قوائ مه والقوائم الفرع ية. عند ما تن هي تص ميم قوائمك يمكنك كتابة شفرة حدث أي من هذه القوائم. 1.25.1.1 تدريب : إضافة القائمة إلى نموذج.132 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.133 قم بسحب ورمي عنصر التحكم MenuStrip من Toolbox إلى النموذج بغض الن ظر عن المكان الذي ق مت برم يه ف يه سيحتل الحا فة العلو ية للنموذج وتظ هر أول قائمة إلى اليسار..134 أنقر فوق عنصر التحكم MenuStrip ثم قم بكتابة File ثم أضرب المفتاح Enter في لوحة المفاتيح..135 في المربع الذي سوف يظهر تحت القائمة File أنقر فوقه ثم أكتب Exit ثم أضرب المفتاح Enter من لوحة المفاتيح أنظر شكل.4-19 69
شكل :19-4 تحرير القوائم..136 أنقر مرتين فوق القائمة Exit لتظهر نافذة.Code Editor.137 في عامل التحكم ExitToolStripMenuItem_Clicl أكتب الشفرة التالية : )( Application.Exit.138 أضرب المفتاح F5 لتشغ يل البرنا مج ثم أختار Exit من القائ مة File لتغلق البرنامج. 1.25.2 استخدام خاصية Enabled سنتعلم فيما يلي كيف نسمح للمستخدم أو ل نسمح له باستخدام القوائم أثناء التشغيل ح يث أ نه في ب عض الحوال ل يم كن ا ستخدام ب عض الوظائف ال تي تقدم ها القوائم. مع ظم البرا مج تل جأ إلى عزل القائ مة عوضا I عن إخفاء ها ح تى ل تس مح لمس تخدميها با ستخدام القائمة. تستخدم الخاصية Enabled المرتبطة بعنصر التحكم StripMenu حتى تعزل أو ل تعزل ا ستخدام القائ مة. للخا صية Enabled قيمت ين ه ما True وتع ني أن القائ مة غ ير معزولة والقيمة False وتعني أن القائمة معزولة. 1.25.2.1 تدريب : استخدام الخاصية Enabled استكمال للتدريب السابق..139 أضف للنموذج عنصر تحكم.TextBox 70
.140 أضف إلى النموذج عنصر تحكم جديد MenuStrip ثم قم بتسميته.Edit.141 أن قر فوق المر بع النازل من عنص ر التح كم MenuStrip المس مى Edit ثم قم بتسميته.Copy.142 من نافذة الخص ائص قم بض بط خا صية Enabled لعنص ر التح كم CopyToolStripMenuItem لتصبح.False.143 أنقر فوق عنصر التحكم TextBox1 مرتين ثم أكتب الشفرة التالية : If Textbox1.Text <> "" Then CopyToolStripMenuItem.Enabled = True Else CopyToolStripMenuItem.Enabled = False End If.144 قم بضرب المفتاح F5 في لوحة المفاتيح لتنفيذ البرنامج. ع ند تنف يذ البرنا مج مادام مر بع النص وص فراغ من أي نص لن يمك نك ا ستخدام Copy من القائمة Edit فقط يمكنك استخدامها عندما يكون هذا المربع يحتوي على نص. 1.25.3 إضافة شريط قوائم قياسي شر يط القوائم القيا سي هو شر يط يحتوي القوائم القيا سية في ت طبيقات Microsoft Windows وهي القوائم File و Edit و Tools و Help بما تضمنه من قوائم فرعية. يبسط Visual Basic.NET 2008 عملية تحرير القوائم القياسية على المبرمج حيث يمكن أضافتها بواسطة إجراءات بسيطة يبينها التدريب التالي. 1.25.3.1 تدريب : إضافة شريط قوائم قياسي.145 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.146 قم بسحب ورمي عنصر التحكم MenuStrip من Toolbox إلى النموذج بغض الن ظر عن المكان الذي ق مت برم يه ف يه سيحتل الحا فة العلو ية للنموذج وتظ هر أول قائمة إلى اليسار. 71
.147 أنقر فوق السهم الموجود في الجانب اليمن العلوي من شريط القائمة لتظهر قائمة كالمبينة في شكل 4-20 اختار منها.Insert Standard Items شكل :20-4 إضافة شريط قوائم قياسي إلى النموذج.148 يتحول شريط القوائم إلى شريط قوائم قياسي كالمبين في شكل.4-21 شكل :21-4 النموذج مضاف إلية شريط القوائم القياسي 1.25.4 القوائم المنسدلة Pop-Up Menus كثير من البرامج تستخدم القوائم المنسدلة التي يمكن الوصول إليها عن طريق النقر فوق المفتاح اليمن للفأرة. يمكن أنشاء القوائم المنسدلة في Visual Basic باستخدام عنصر التحكم.ContextMenuStrip 72
يتشابه عنصر التحكم ContextMenuStrip مع عنصر التحكم MenuStrip في طريقة عمله إل أنه يختلف عنه في أن عناصر القائمة لبد وأن توضع تحت عنصر القائمة الول أي أنها قوائم رئيسية. أيضا I فإن عنصر التحكم ContextMenuStrip لبد أن يكون مرتبط مع نموذج أو عنص ر تح كم آ خر ح يث تر غب في أن يظ هر. ي تم هذا عن طر يق ض بط الخا صية ContextMenuStrip للنموذج أو عنصر التحكم الذي ترغب في أن تظهر القائمة المنسدلة فوقه. كما يمكنك أن تقوم بربط عنصر تحكم ContextMenuStrip في العديد من عناصر التحكم. 1.25.4.1 تدريب : عمل قائمة منسدلة وربطها بنموذج.149 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.150 قم بسحب ورمي عنصر التحكم ContextMenuStrip من Toolbox إلى سطح النموذج..151 من نافذة خص ائص النموذج قم بض بط الخا صية ContextMenuStrip لتص بح.ContextMenuStrip1.152 أنقر فوق عنصر التحكم ContextMenuStrip فوق النموذج ثم أكتب Option1 أضرب المفتاح Enter ثم بكتا بة Option2 في المر بع التالي ثم أضرب المفتاح Enter مرة أخرى..153 أنقر مرتين فوق Option1 لتنفتح النافذة.Code Editor.154 في عامل الحدث Option1ToolStripMenuItem_Click أكتب الشفرة التالية : )" MsgBox("You chose Option 1 أختار من القائ مة اليس رى لنافذة Editor Code عنص ر التح كم Option2ToolStripMenuItem ومن لقائمة اليمنى الحدث.Click 73
في عا مل الحدث Option2ToolStripMenuItem_Click أك تب الشفرة التالية : )" MsgBox("You chose Option 2 قم بضرب المفتاح F5 لتشغيل البرنامج. 1.26 استخدام عنصر التحكم Timer في هذا القس م سنتناول كيف ية ا ستخدام عنص ر التح كم Timer لتنف يذ إجراءات ل تس تحثها مدخلت مس تخدم الت طبيق. م ثل هذه الجراءات ال تي ل تعت مد على مدخلت المستخدم ولكن تعتمد على مرور فترة معينة شائعة في العديد من التطبيقات مثل الحفظ اللي Autosave للوثائق في برنا مج Microsoft Word مثل أو تحد يث صفحات الوب في بعض المتصفحات. مثل هذه الجراءات يلزم لتنفيذها استخدام عنصر التحكم.Timer يختلف عنصر التحكم Timer عن غيره من عناصر التحكم التي سبق وأن تناولنها حيث أنه ليس له واجهة استخدام. عناصر التحكم التي ليس لها واجهة استخدام يطلق عليها في Visual Basic.NET 2008 السم "مكونات."Components المكون Timer له خاصيتين وحدث واحد دائما I ما يستخدموا. الخاصية System.Timers.Timer.Enabled والتي تحدد ما إذا كان الـ Timer يعمل حيث تكون في هذه الحالة لها القيمة True أو ل تعمل وفي هذه الحالة تكون لها القيمة.False الخاصية الثانية هي System.Timers.Timer.Interval والتي تحدد عدد المللي ثانية بين دقات Ticks ساعة.Timer على سبيل المثال إذا كانت هذه الخاصية مضبوطة على القي مة 1000 فإن ال ـ Timer سوف يقوم بد قة Tick كل ١٠٠٠ مللي ثان ية أي كل ثانية. حدث الد قة أو Tick Event هو الحدث الذي سوف يحدث آليا I ع ند مرور ال ـ Interval المحدد من ق بل ال مبرمج ويم كن بض بط كل I من خا صية Enabled وخا صية Interval وإضافة تعليمات للحدث Tick تكرار إجراءات الحدث Tick على فترات زمنية متساوية وتساوي الفترة المحددة في.Interval 74
1.26.1.1 تدريب : استخدام المكون Timer في بناء تطبيق الساعة.155 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.156 قم بس حب عنص ر تح كم من النوع Label ورم يه فوق النموذج Form1 سيحمل السم Label1 آليا.A.157 من Toolbox أن قر التبو يب Components ثم أ سحب من تح ته المكون Timer و قد برم يه فوق النموذج Form1 يص بح ا سمه آليا Timer1 A ك ما أ نه ل يظ هر فوق الـ Form1 لكنه يظهر في شريط أسفل Form1 كما هو مبين في شكل 4-22 حيث أنه يفتقر إلى واجهة الستخدام فل محل له فوق النموذج..158 أنتقل إلى نافذة الخصائص وتأكد أن عنصر التحكم موضوع النافذة هو Timer1 قم بضبط الخاصية Enabled لتصبح True والخاصية Interval لتصبح.١٠٠٠.159 أن قر المكون Timer1 نقرا A مزدوجا A لتتم كن من ف تح نافذة Code Editor على الحدث.Timer1_Tick 75
شكل :22-4 المكون Timer في Toolbox وعلى النموذج Form1 أضف شفرة التعليمات التالية : Label1.Text=My.Computer.Clock.LocalTime.ToLongTimeString اضرب المفتاح F5 لتنفيذ البرنامج. 1.27 عناصر التحكم ListBoc و ComboBox عنص ري التح كم ListBox و ComboBox يس محا للمس تخدم أن يختار عنص ر item من قائ مة من العنا صر. يختلف عنص ر التح كم ListBox عن عنص ر التح كم ComboBox بأ نه يعرض عدة أ سطر في آن وا حد على ح ين ل يعرض عنص ر التح كم ComboBox إل عنصر واحد فقط. 76
شكل :23-4 عنصر التحكم ListBox يعرض أكثر من بند في آن واحد بينما يتميز عنصر التحكم ComboBox بأنه يسمح للمستخدم أن يختار من قائمة العنا صر أو يض يف إلي ها ويختار ما أضا فه م ما يجعله مز يج من ال ـ TextBox وال ـ ListBox في نفس الوقت. شكل :24-4 عنصر التحكم ComboBox يسمح للمستخدم أن يختار أو أن يحرر البند الذي يختاره 77
في هذا القس م سنتعلم ك يف نض يف أو نحذف عنا صر items إلى عنا صر تح كم القوائم بنوعي ها ك ما سنتعلم ك يف نب ني حدث يس تجيب به البرنا مج لختيار ب ند مع ين من القوائم. 1.27.1 تدريب : إضافة عنصر Item إلى عنصر التحكم ListBox.160 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.161 قم بسحب عنصر تحكم من النوع ListBox ورميه فوق النموذج Form1 سيحمل السم ListBaox1 آليا.A شكل :25-4 إضافة عنصر التحكم ListBox.162 أن قر مرت ين فوق النموذج لتف تح نافذة تحر ير التعليمات. معالج الحدث الفترا ضي الذي سوف يظهر هو Form1_Load أي حدث تحميل النموذج في ذاكرة البرنامج..163 أكتب التعليمات التالية في هذا الحدث. With Me.ListBox1.Items ).Add("red ).Add("blue ).Add("green ).Add("yellow ).Add("orange 78
).Add("pink ).Add("brown ).Add("black End With أنقر F5 لتنفيذ البرنامج. لحظ أن القائمة أصبحت تحتوي على اللوان التي قمنا بكتابتها. شكل :26-4 التطبيق أثناء التشغيل 1.27.1.1 ملحظات حول تعليمات البرنامج لعل القارئ لحظ أن هناك تعليمات جديدة استخدمت في هذا التطبيق لذلك سنتوقف عند هذه التعليمات قليل. القسم التالي من التعليمات تحديدا I هو ما يجب أن نتوقف عنده. With Me.ListBox1.Items. End With فالكتلة With. End With تستخدم عندما سوف نقوم بمجموعة من العلميات على كائن ما. وهذا الكائن في هذه الحالة هو.Me.ListBox1 أي أنه ListBox1 لكن لماذا قمنا بكتابته بهذه الطريقة Me تعني النموذج نفسه فكأننا نقول عنصر التحكم ListBox1 الموجود في النموذج.Form1 79
إن هذه التعليمات يمكن كتابتها بصورة أخرى هي كالتالي ) Me.ListBox1.Add( red ) Me.ListBox1.Add( green ) Me.ListBox1.Add( blue ) Me.ListBox1.Add( yellow ) Me.ListBox1.Add( orange ) Me.ListBox1.Add( pink ) Me.ListBox1.Add( brown ) Me.ListBox1.Add( black وهكذا نكون ا ستغنينا عن With End With لكن نا قم نا بالكث ير من كتا بة التعليمات. 1.27.1.2 الطريقة Add الطري قة Add تس تخدم مع كل I من عنص ر التح كم ListBox وعنص ر التح كم ComboBox لضافه البنود حيث تكتب بهذه الطريقة ) Control.Add( item ومن الواضح أن العناصر لبد أن تكون قيم نصية. 1.27.2 تدريب : تصميم حدث للستجابة على اختيار بند من القائمة استكمال I على التطبيق السابق..164 قم بسحب عنصر تحكم من النوع Textbox ورميه فوق النموذج Form1 سيحمل السم Textbox1 آليا.A 80
شكل :27-4 إضافة عنصر التحم TextBox إلى واجهة التطبيق أن قر مرت ين فوق ListBox1 لتف تح نافذة تحر ير التعليمات. معالج الحدث الفترا ضي الذي سوف يظ هر هو ListBox1_SelectedIndexChanged أي حدث اختيار عنصر من القائمة. أكتب التعليمات التالية في الحدث. ) Dim ColorName As String = CStr(ListBox1.SelectedItem If ColorName IsNot Nothing Then _ = Me.TextBox1.BackColor ( System.Drawing.Color.FromName(ColorName End If أن قر على F5 لتنفيذ البرنامج. قم باختيار أ حد اللوان ليتغير لون خلفية الـ Textbox تبعا A للون الذي قمت باختياره. 81
شكل :28-4 آثر اختيار اللون الخضر من ListBox1 على خلفية Textbox1 1.27.2.1 ملحظات حول تعليمات البرنامج في هذا البرنامج هناك بعض التعليمات الجديدة المستخدمة وفيما يلي سنتعرف على هذه التعليمات وما الذي تقوم به. في السطر الول : ) Dim ColorName As String = CStr(ListBox1.SelectedItem قم نا بالعلن عن متغ ير ColorName من النوع ال ـ String ثم ا ستخدمنا دالة التحو يل Casting إلى لف ظي CStr لتحو يل العنص ر المختار SelectedItem من قائ مة عناصر عنصر التحكم.ListBox1 ثم ا ستخدمنا عبارة if محلو قة بشرط يتكون من ColorName و هو أ سم المتغ ير الذي أعلنا عنه من قبل واختزنا فيه قيمة نص العنصر المختار من.ListBox1 ثم IsNot و هي دالة تس تخدم للمقار نة ب ين قيمت ين القي مة الولى هي ColorName والثان ية هي Nothing وهي دالة أخرى تمثل الـ Null If ColorName IsNot Nothing Then End If 82
وهذا يع ني أ نه إذا كانت قيمة ColorName ليس ت Null فإن الشرط يتح قق لن IsNot ترجع قيمة Boolean هي True عند عدم التساوي و False عند التساوي. وعند تحقق الشرط يتم تنفيذ التعليمات التالية : _ = Me.TextBox1.BackColor ( System.Drawing.Color.FromName(ColorName تعرفنا فيما سبق على Me والتي تعني الـ Form1 نفسه ثم TextBox1 وهو أسم العنصر المطلوب تغيير خاصيته BackColor ثم علمة التخصيص. الشرطة السفلية _ تعني أن السطر التالي هو مكمل للسطر الذي انتهى بهذه العلمة. ثم تخصيص لون باعتماد مكتبة ألوان خاصة سنتعرف عليها في موضع متقدم من هذا الكتاب. 1.27.3 تدريب : تعيين ما إذا كان عنصر ما موجود في القائمة أو ل عند ما نقوم بإضا فة عنص ر إلى قائ مة فإ نه غالبا I ما ل نر يد أن يكون هذا العنص ر مضاف من ق بل. في التدر يب التالي نقوم بنس خ عنص ر من ListBiox إلى عنص ر تح كم سوف نضيفه على مشروعنا هو ComboBox بأن ننقر عليه مرتين في.ListBox أضف عنصر تحكم ComboBox بأن تسحبه من الـ Toolbox ثم ترميه فوق النموذج. يصبح السم الفتراضي لهذا النموذج هو.ComboBox1 أنتقل إلى محرر التعليمات.Code Editor في محرر التعليمات أختار من قائ مة Class Name عنص ر التح كم.ListBox1 من قائمة Method Name أختار.Double Click شكل :29-4 أختار ListBox من Class Name وأختر Double Click من.Method Name في الجراء الذي سوف يظهر بعنوان ListBox1_DoubleClick قم بكتابة التعليمات التالية : 83
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام If ListBox1.SelectedItem IsNot Nothing Then If Not _ ComboBox1.Items.Contains(Me.ListBox1.SelectedItem)_ Then Me.ComboBox1.Items.Add(Me.ListBox1.SelectedItem( End If Me.ComboBox1.SelectedItem = Me.ListBox1.SelectedItem End If. لتنفيذ البرنامج F5 قم بضرب المفتاح. البرنامج بعد تعديله أثناء التشغيل :30-4 شكل تعليق على تعليمات البرنامج 1.27.3.1 ما سوف نعلق عليه في هذا الجزء هو السطر ComboBox1.Items.Contains(Me.ListBox1.SelectedItem) عنصر Items ضمن عناصره Contains يضم ComboBox1 وهو يعني أن الـ.Me.ListBox1.SelectedItem باسم حذف عنصر من قائمة 1.27.4.Remove في التدريب التالي سوف نتعلم حذف عنصر من قائمة باستخدام الطريقة 84
أضف التعليمات التالية فوق End If في حدث.ListBox1_DoubleClick ) Me.ListBox1.Items.Remove(Me.ListBox1.SelectedItem أضرب المفتاح F5 لتنفيذ البرنامج. شكل :31-4 حذف العنصر Pink من قائمة, ListBox إضافته إلى.ComboBox 1.28 استخدام عناصر التحكم MonthCalendar و DateTimePicker في هذا القسم سوف نتعلم كيف نعرض التاريخ فوق النموذج وكيف يمكننا أن ننشأ حدث يعتمد على اختيار مستخدم التطبيق للتاريخ. ع ند ا ستخدام عنا صر التح كم ال تي تظ هر التار يخ فإن هذا يض من لل مبرمج أن مستخدمي تطبيقه سوف يدخلون التاريخ بالهيئة المقبولة في.Visual basic.net تحتوي Visual Basic.Net 2008 على عنص ري تح كم للتار يخ ه ما MonthCalender و.DateTimePicker عنص ر التح كم :MonthCalender ح يث يظ هر روزنا مة لش هر محدد يم كن للمستخدم أن يختار تاريخ محدد أو مدى من التواريخ. عنصر التحكم :DateTimePicker ويظهر في حالتين الحالة الفتراضية هو أن يظهر في صورة صندوق نصوص وإلى جواره سهم قائمة منسدلة عند النقر عليه 85
تظ هر الروزنا مة و من ثم ي تم اختيار التار يخ المطلوب. والحالة الثان ية هو أن يعرض عنصر التحكم الزمن بدل التاريخ. 1.28.1 تدريب : استرجاع البيانات من MonthCalender وعرضها في Label.165 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.166 قم بس حب عنص ر تح كم من النوع Label ورم يه فوق النموذج Form1 سيحمل السم Label1 آليا.A.167 من نافذة Properties أجعل خاصية Text لعنصر التحكم Label1 فارغة..168 قم بسحب عنصر تحكم من النوع MonthCalender ورميه فوق النموذج Form1 سيحمل السم MonthCalender1 آليا.A أن قر مرت ين فوق عنص ر التح كم MonthCalender1 لتقوم بف تح محرر ضي لهذا العنص التعليمات على الحدث الفترا رو هو الحدث.MonthCalendar1_DateChanged.169 أضف التعليمات التالية لهذا الحدث. _ = Me.Label1.Text ( CStr(Me.MonthCalendar1.SelectionRange.Start.170 قم بس حب عنص ر تح كم من النوع DateTimePicker ورم يه فوق النموذج Form1 سيحمل السم DateTimePicker1 آليا.A أن قر مرت ين فوق عنص ر التح كم DateTimePicker1 لتقوم بف تح محرر ضي لهذا العنص التعليمات على الحدث الفترا رو هو الحدث.DateTimePicker1_ValueChanged.171 أضف التعليمات التالية لهذا الحدث. _ = Me.Label1.Text ) CStr(Me.DateTimePicker1.Value 86
قم بضرب المفتاح F5 لتنف يذ البرنا مج ثم جرب اختيار تار يخ من ال ـ MonthCalender1 ثم من.DateTimePicker1 شكل :32-4 واجهة التطبيق. 1.28.2 تدريب : استرجاع عدة بيانات تاريخ في التدريب السابق استخدمنا SelectedRange.Start لتكون القيمة المرتجعة من اختيار التاريخ في عنصر التحكم MonthCalender1 هو أول تاريخ في يختاره المستخدم لكن نا اشر نا في ما سبق أ نه يم كن للمس تخدم أن يختار نطاق Range من التار يخ و في هذه الحالة يلزمه أن يختار الخاصيتين SelectedRange.Start و.SelectedRange.End العدد الفتراضي المتاح اختياره من اليام هو سبعة أيام لكن يمكن تغيير هذه القيمة من خلل الخاصية.MaxSelectionCount قم بتغي ير التعليمات الموجودة في الحدث MonthCalendar1_DateChanged ليصبح كالتالي : 87
Me.MonthCalendar1.MaxSelectionCount = 14 _ = If Me.MonthCalendar1.SelectionRange.Start Me.MonthCalendar1.SelectionRange.End Then _ = Me.Label1.Text ) CStr(Me.MonthCalendar1.SelectionStart Else _ = Me.Label1.Text _ & Me.MonthCalendar1.SelectionRange.Start " - " & Me.MonthCalendar1.SelectionRange.End End If هذه التعليمات تج عل القي مة القص وى المم كن اختيار ها من اليام هي أرب عة عشرة يوم. ثم تس تخدم الجملة If لختبار ما إذا كان النطاق المختار في MonthCalender1 للخاصيتين SelectedRange.Start و SelectedRange.End لهما نفس القيمة )أي أن المستخدم أختار يوم واحد( أم ل ) المستخدم أختار نطاق من اليام( وفي حالة تحقق الشرط فإن Label1 يعرض تاريخ يوم واحد فقط أما في حالة عدم تحقق الشرط فسوف يعرض Label1 تاريخ البداية والنهاية. أضرب المفتاح F5 اختبر تنفيذ البرنامج. 1.28.3 شكل بيانات التاريخ في كث ير من الحيان قد يحتاج ال مبرمج إلى تغي ير الش كل الذي تظ هر به بيانات التار يخ و في هذه الحالة فإ نه يحتاج أن يقوم با ستخدام الوظي فة FormateDateTime وإحدى القيم المبينة في الجدول اللحق : القيمة DateFormat.GeneralDate DateFormat.LongDate DateFormat.ShortDate DateFormat.LongTime 88 مثال 11/22/1963 12:00 Friday, November 22, 1963 11/22/1963 12:00:00 PM
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام 12:00 DateFormat.ShortTime تعديل شكل بيانات التاريخ : تدريب 1.28.4 في الحدث ير التعليمات الموجودة قم بتغي : ليصبح كالتالي MonthCalendar1_DateChanged Me.MonthCalendar1.MaxSelectionCount = 14 If Me.MonthCalendar1.SelectionRange.Start = _ Me.MonthCalendar1.SelectionRange.End Then Me.Label1.Text = FormatDateTime( _ Me.MonthCalendar1.SelectionStart, _ DateFormat.LongDate) Else Me.Label1.Text = FormatDateTime( _ Me.MonthCalendar1.SelectionRange.Start, _ DateFormat.LongDate) & " - " & FormatDateTime( _ Me.MonthCalendar1.SelectionRange.End, DateFormat.LongDate) End If هي القي مة المختارة من Label1 فإن القيمة ال تي سوف تظ هر ك ما يل حظ القارئ وتعي ين FormatDateTime ل كن ب عد تمرير ها من خلل الوظي فة MonthCalender1.DateFormat.LongDate شكل البيانات المرتج ليكون : هي كالتالي FormateDateTime الصورة العامة للوظيفة هي قيمة التاريخ المراد value ( حيث FormatDateTime( value, constant. هو أحد القيم من الجدول السابق constant بينما إعادة صياغة شكله. لتنفيذ البرنامج F5 أضرب المفتاح 89
1.29 المكون ErrorProvider عامل نا مع المكونات Components سابقا I حين ما قدم نا المكون.Timer في هذا القس م نقدم مكون آ خر هو.ErrorProvider الوظي فة ال ساسية للمكون ErrorProvider مساعدة المبرمج ومستخدم التطبيق على التأكد أن مدخلت البرنامج مطابقة لتصميمه. 1.29.1 تدريب : التحقق من المدخلت باستخدام ErrorProvider في هذا التدر يب سنستخدم المكون ErrorProvider للتح قق من مطاب قة مدخلت التطبيق عبر مجموعة من صناديق النصوص TextBox للغرض التصميميي..172 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.173 قم بس حب عنص ر تح كم من النوع Label ورم يه فوق النموذج Form1 سيحمل السم Label1 آليا.A.174 قم بتغيير قيمة الخاصية Text لعنصر التحكم Label1 لتصبح.Name.175 قم بس حب عنص ر تح كم من النوع Label ورم يه فوق النموذج Form1 سيحمل السم Label2 آليا.A.176 قم بتغيير قيمة الخاصية Text لعنصر التحكم Label2 لتصبح.Age.177 أ ضف TextBox أمام كل عنص ر تح كم Label ليص بح لد يك TextBox1 و.TextBox2.178 قم بس حب مكون من ErrorProvider من تبو يب Components في ال ـ Toolbox ورميه فوق النموذج Form1 سيحمل السم ErrorProvider1 آليا.A.179 افتح محرر التعليمات..180 من قائمة Class name أختار.TextBox2.181 من قائمة Method Name أختار.Validating أضف التعليمات التالية إلى الحدث :TextBox2_Validating 90
If Not IsNumeric(TextBox2.Text) Then _ ErrorProvider1.SetError(TextBox2, )" "You must enter a numeric value. Else )"" ErrorProvider1.SetError(TextBox2, End If اضرب المفتاح F5 لتنفيذ البرنامج واختباره. 1.29.2 تعليق على تعليمات التدريب استخدمنا في هي التعليمات الوظيفة IsNumeric والتي ترجع قيمة true إذا كان ما بين القوسين رقمي وقيمة false إذا كان ما بين القوسين غير رقمي. في حال عدم تح قق شرط أن قي مة TextBox2 هي قي مة رقم ية فإن الكائن ErrorProvider سوف يظهر علمة تنبيه إلى جوار الكائن TextBox2 عند الشارة إلى هذه العلمة بمؤشر الفارة تظهر الرسالة.You must enter a numeric value وذلك نتيجة استخدام التعليمات في الصورة التالية : _ ErrorProvider1.SetError(TextBox2, )" "You must enter a numeric value. ح يث ي تم أضا فه ب ين القواس ب عد SetError ا سم الكائن الذي سوف تظ هر إلى جواره علمة التنبيه ثم الرسالة التي سوف تظهر عند الشارة إلى علمة التنبيه. 1.30 استخدام صناديق الحوار Dialog Boxes يتوفر في Visual Basic.Net 2008 مجموعة من عناصر التحكم التي تيسر على المس تخدم عدد من العمليات الروتين ية في الت طبيقات العاملة في بيئة التشغ يل Microsoft Windows مثل نافذة فتح الملفات أو نافذة اختيار اللوان. ويطلق عل هذه العائلة من أدوات التحكم اسم صناديق الحوار Dialog Boxes وهي التي يمكن الطلع عليها في التبويب Dialogs في الـ Toolbox كما هو مبين في شكل.4-33 91
شكل :33-4 تبويب Dialogs ويجب أن ننوه أن هذه العائلة من عناصر التحكم هي من جنس المكونات أي أنها ل تظهر فوق النموذج. 1.30.1 تدريب : استخدام صندوق الحوار FolderBrowserDialog.182 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.183 قم بس حب عنص ر تح كم من النوع Label ورم يه فوق النموذج Form1 سيحمل السم Label1 آليا.A.184 قم بس حب عنص ر تح كم من النوع Button ورم يه فوق النموذج Form1 ثم قم بتغيير خصائصه للتوافق مع الجدول التالي. القيمة FolderPath Path الخاصية Name Text.185 قم بسحب عنصر تحكم من النوع FolderBrowserDialog ورميه فوق النموذج Form1 سيحمل السم FolderBrowserDialog1 آليا.A أن قر مرت ين فوق المفتاح لتقوم بف تح محرر التعليمات على الحدث.FolderPath_Click أضف التعليمات التالية للحدث :FolderPath_Click 92
_ = )( If FolderBrowserDialog1.ShowDialog Windows.Forms.DialogResult.OK Then Label1.Text = FolderBrowserDialog1.SelectedPath End If أضرب المفتاح F5 من لوحة المفاتيح لتنفيذ البرنامج. عند تنفيذ البرنامج أنقر المفتاح Path لتظ هر نافذة تص فح المجلدات أختار مجلدا A وأن قر OK لينط بع عنوان المجلد في عنصر التحكم.Laberl1 شكل :34-4 التطبيق أثناء العمل. لتفسير التعليمات المستخدمة في هذا التدريب في البداية استخدمنا العبارة IF لختبار الشرط : _ = )( FolderBrowserDialog1.ShowDialog Windows.Forms.DialogResult.OK Then وهو شرط نوعا I ما مركب حيث يقوم بالتالي : أظهار واجهة عنصر التحكم FolderBrowserDialog1 وهي التعليمات 93
)( FolderBrowserDialog1.ShowDialog اختبار ما إذا كان مرجوع عنصر التحكم هو Windows.Forms.DialogResult.OK وهو الذي يعني النقر فوق المفتاح.OK وع ند تح قق هذا الشرط فإن الخا صية Text لعنص ر التح كم Label1 تص بح تساوي : FolderBrowserDialog1.SelectedPath وهو ما يعني أن هذه الخاصية سوف يختزن فيها المجلد المختار من عنصر التحكم FolderBrowserDialog1 1.30.2 تدريب : استخدام صندوق الحوار FontDialog.186 قم بس حب عنص ر تح كم من النوع Button ورم يه فوق النموذج Form1 ثم قم بتغيير خصائصه للتوافق مع الجدول التالي. الخاصية Name Text القيمة TextFont Font قم بس حب عنص ر تح كم من النوع FontDialog ورم يه فوق النموذج Form1 سيحمل السم FontDialog1 آليا.A أن قر مرت ين فوق المفتاح TextFont لتقوم بف تح محرر التعليمات على الحدث.TextFont_Click أضف التعليمات التالية للحدث :TextFont_Click FontDialog1.ShowColor = True _ = )( If FontDialog1.ShowDialog Windows.Forms.DialogResult.OK Then Label1.Font = FontDialog1.Font Label1.ForeColor = FontDialog1.Color End If 94
أضرب المفتاح F5 من لو حة المفات يح لتنف يذ البرنا مج. ع ند تنف يذ البرنا مج أن قر المفتاح Font لتظهر نافذة ضبط الخط قم بضبط الخط كما تشاء ثم انقر المفتاح OK ليتغير الخط المستخدم في عنصر التحكم.Laberl1 شكل :35-4 أضافة FontDialog للتطبيق. 1.30.3 تدريب : استخدام صندوق الحوار ColorDialog.187 قم بس حب عنص ر تح كم من النوع Button ورم يه فوق النموذج Form1 ثم قم بتغيير خصائصه للتوافق مع الجدول التالي. الخاصية Name Text القيمة FormColor Color قم بس حب عنص ر تح كم من ColorDialog ورم يه فوق النموذج Form1 سيحمل السم ColorDialog1 آليا.A أن قر مرت ين فوق المفتاح FormColor لتقوم بف تح محرر التعليمات على الحدث.FormColor _Click 95
أضف التعليمات التالية للحدث :FormColor _Click _ = )( If ColorDialog1.ShowDialog Windows.Forms.DialogResult.OK Then Me.BackColor = ColorDialog1.Color End If أضرب المفتاح F5 من لو حة المفات يح لتنف يذ البرنا مج. ع ند تنف يذ البرنا مج أن قر المفتاح Color لتظهر نافذة اختيار اللون أختر لون مناسب ثم انقر المفتاح OK ليتغير لون خلفية النموذج. شكل :36-4 استخدام الـ.ColorDialog 1.31 استخدام عنصر تحكم أشرطة الدوات ToolStrip تعتبر أشرطة الدوات مكون رئيسي من مكونات واجهات التطبيقات العاملة في بيئة التشغيل.Microsoft Windows في هذا القسم سنتعلم كيف نقوم بإضافة أشرطة الدوات إلى واجهات تطبيقاتنا وكيف نقوم بإضافة مفاتيح الدوات إليها وربطها بالتعليمات. 96
1.31.1 تدريب : إضافة شريط الدوات.188 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.189 قم بسحب عنصر تحكم من النوع ToolStrip من التبويب Menu & Toolbars ورميه فوق النموذج Form1 سيحمل السم ToolStrip1 آليا A ويشغل الحرف العلى للنموذج.Form1 أنقر فوق السهم لتظهر القائمة المنسدلة وأختر منها Button إضافة مفتاح إلى شريط الدوات وهو يحمل السم.ToolstripButton1 شكل :37-4 إضافة Button إلى ToolStrip قم بض بط خص ائص المفتاح ToolstripButton1 لتص بح كالمبي نة في الجدول التالي : الخاصية Name القيمة Cut 97
Text DisplayStyle Cut Text.190 قم بسحب عنصر تحكم من النوع TextBox ورميه فوق النموذج Form1 سيحمل السم TextBox1 آليا.A.191 أضبط خصائص الـ Textbox للتوافق مع الجدول التالي : الخاصية Size Text القيمة 220,20 This is simple test أنقر مرتين فوق المفتاح Cut لتقوم بفتح محرر التعليمات على الحدث _ Cut.Click أضف التعليمات التالية للحدث :Cut_Click )( Me.TextBox1.Cut أضرب المفتاح F5 من لو حة المفات يح لتنف يذ البرنا مج. ظلل أيا A من الكلمات الظاهرة في الـ TextBox ثم أنقر المفتاح Cut لترى كيف تم قصها. 1.31.2 إضافة شريط أدوات قياسي شر يط الدوات القيا سي هو شر يط الدوات الذي يحتوي على وظائف New, Open, Save, Print, Cut, Copy, Paste, Help و هو موجود في غالب ت طبيقات.Microsoft Windows ويسهل Visual basic.net 2008 إضافة مثل هذا الشريط القياسي للتطبيقات كل ما تحتاجه هو أن تنقر على السهو الموجود في الركن اليمن العلى من شر يط الدوات لتظ هر القائ مة المنس دلة الخا صة به وأخ تر من ها Insert Standard Items كما في ثم يكون عليك بعد ذلك كتابة التعليمات لكل منها. 98
:38-4 إضافة شريط الدوات القياسي. 1.32 استخدام عنصر التحكم TreeView يمك نك أن تض في على ب عض تطبيقا تك مظ هر مقارب لمظ هر Windows Explorer وذلك با ستخدام عنص ر التح كم.TreeView يعرض عنص ر التح كم TreeView البيانات في شكل شجرة تتكون من.Nodes وتنقسم هذه الـ Nodes على ثلثة أقسام هي : Parent Nodes Child Nodes Root Node حيث تمثل الـ Node الساسية التي تتشعب عنها جميع الشعب الـ Root Node بين ما يطلق على أي Node يتش عب من ها واحدة او أك ثر من ال ـ Nodes ا سم ال ـ Parent Nodes وأخيرا I يطلق اسم الـ Child Nodes على هذه التي ل يتشعب عنها شئ. 1.32.1 تدريب : أنشاء متصفح لمواقع النترنت.192 من قائ مة File أختار New Project و من تبو يب القوالب Template أختار Windows Application ثم أنقر المفتاح.OK.193 قم بس حب عنص ر تح كم من النوع TreeView ورم يه فوق النموذج Form1 سيحمل السم TreeView1 آليا.A 99
.194 قم بس حب عنص ر تح كم من النوع WebBrowser ورم يه فوق النموذج Form1 سيحمل السم WebBrowser1 آليا.A.195 قم بضبط خصائص عناصر التحكم للتوافق مع الجدول التالي : الخاصية عنصر التحكم Text Form1 Size Dock TreeView1 Size Dock WebBrowser1 الضبط Forum Explorer 764,564 Left 190,530 Fill قم باختيار عنص ر التح كم TreeView1 ثم أن قر على الس هم الموجود في الجا نب الي من العلى لتحص ل على القائ مة المنس دلة لهذا العنص ر وأخ تر Edit Nodes ك ما بالش كل شكل 4-39 لتف تح نافذة معالج تحر ير ال ـ Nodes المبي نة في شكل.4-40 شكل :39-4 فتح معالج تحرير الـ.Nodes 100
شكل :40-4 معالج تحرير الـ.Nodes أنقر فوق المفتاح.Add Root في الجا نب الي من المخص ص لض بط الخص ائص في معالج تحر ير ال ـ Nodes قم بتغيير قيمة الخاصية Text لتصبح.Visual Basic Forum انقر المفتاح.Add Child قم بضبط خاصية Text لهذه الـ Node لتصبح Visual Basic Express.Edition انقر المفتاح Add Child ثانية. قم بضبط خاصية Text لهذه الـ Node لتصبح.Visual Basic IDE انقر المفتاح Add Child مرة أخيرة. قم بض بط خا صية Text لهذه ال ـ Node لتص بح Visual Basic.Language أنقر المفتاح.OK أن قر مرت ين فوق TreeView1 لتحص ل على معالج الحدث المس مى.TreeView1_AfterSelect 101
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام : أضف هذه التعليمات للحدث Select Case e.node.text Case "Visual Basic Forums" WebBrowser1.Navigate("http://go.microsoft.com/" _ & "fwlink/?linkid=82999") Case "Visual Basic Express Edition" WebBrowser1.Navigate("http://go.microsoft.com/" _ & "fwlink/?linkid=82994") Case "Visual Basic IDE" WebBrowser1.Navigate("http://go.microsoft.com/" _ & "fwlink/?linkid=82996") Case "Visual Basic Language" WebBrowser1.Navigate("http://go.microsoft.com/" _ & "fwlink/?linkid=82997") End Select ل حظ أ نه من المفروض أن تكون متص ل. لتنف يذ البرنا مج F5 أن قر فوق. بالنترنت حتى ل تحصل على صفحة عدم التحميل.webBrowser لتحميل محتوياتها في الـ Nodes أختر أي من الـ 102
شكل :41-4 استخدام البرنامج في تصفح موقع.Visual Basic Language 103
تقن ية Windows Presentation Foundation WPF 1 في هذا القس م نقدم تقن ية Windows Presentation Foundation WPF للقارئ وتم ثل هذه التقن ية أ حد الضافات الجديدة 2 إلى Visual Basic.NET 2008 لم تضمها الصدارات السابقة. يم كن تعر يف تقن ية WPF باختص ار أن ها تقن ية لنتاج الواجهات الر سومية. و هي مضمنة في NET Framework 3.0. ومن ثم فإن التطبيقات التي تحتوي على مثل هذه التقن ية يم كن أن تع مل مباشرة على Windows Vista و Windows XP SP2 ولن تعمل على غيرها من النظم. ولمعر فة الفارق ب ين الواجهات المطورة با ستخدام WPF عن تلك الواجهات التقليد ية يم كن أن تتخ يل ب ين الواجهات ال تي يجرى تنفيذ ها با ستخدام برنا مج Adobe Flash وواجهات التطبيقات المعتادة. وقد صممت هذه التقنية كي تسمح للمطور بدمجها في تطبيقات Windows التقليدية أو دمج ها في ت طبيقات الوب ولذلك ف هي تعت مد بص ورة كبيرة على تقن ية أخرى مخص صة للس كريبت الخاص بالوب هي تقن ية Extensible Application Markup Language.XAML و قد ضم نت Microsoft أدوات لتطو ير ت طبيقات لهذه التقن ية في منتج ين ل ها Microsoft Visual Studio.NET 2008 و.Microsoft Expression Blend وفي هذا القس م سنتعرف على طرق تطو ير الت طبيقات با ستخدام هذه التقن ية مع Visual.Basic.NET 2008 1.33 تصميم واجهة تطبيق باستخدام WPF في هذا القسم سنتعرض لنشاء تطبيق WPF وإضافة عناصر إلى واجهته. 1 عرفت هذه التقنية أثناء مرحلة التجريب باسم Avalon و.WinFX 2 في المعتاد ل تصل البرمجيات إلى صورة مثلى قبل الصدارة الثالثة وفي اعتقادي أن تقنية WPF لم تشذ عن هذه القاعدة. 104
ل يختلف إنشاء واجهة تطبيق WPF عن أنشاء واج هة ت طبيق تقليدي ح يث يمكن نا إضافة أي عنصر تحكم بسحبه ورميه فوق الواجهة. لكن هناك بعض الختلفات التي يجب أن نأخذ ها في العتبار. فإلى جا نب نافذة التص ميم ونافذة الدوات ونافذة الخص ائص هناك نافذة جديدة تظ هر هي نافذة.XAML وك ما قدم نا فإن XAML تع ني Extensible Application Markup Language وال تي هي ل غة سكريبت 1 تس تخدم لبناء واجهات.WPF الش كل التالي - شكل - 5-42 يبين محرر XAML في بيئة التطو ير المتكاملة ل ـ.Visual Basic.NET 2008 شكل :42-5 محرر XAML في التطبيقات التقليدية يمكن أن نضيف عناصر التحكم إما عن طريق سحبها ورميها فوق النماذج أو وهذه الطري قة غ ير المعتادة نس تخدم تعليمات لنشاء عنا صر التح كم. وعندما نقوم بسحب عنصر التحكم ورميه فوق النموذج فإن Visual Studio.NET يقوم تلقائيا I بتول يد التعليمات اللز مة لنشاء هذا العنص ر. وبن فس الطري قة ع ند أنشاء ت طبيقات WPF فإن Visual Studio.NET يمك نه أن يولد تعليمات XAML آليا I أو أن يقوم المبرمج بكتابة هذه التعليمات بنفسه. سكريبت XAML يكون مقسما I إلى وسوم Tags بطريقة هرمية. وكل وسم يكون معرف بين أقواس مثلثة > < كما أن هناك وسوم بدء وأخرى وسوم نهاية. فمثل I يمكن إضافة عنص ر تح كم من النوع Button بمجرد إضا فة > <Button> </Button إلى تعليمات 1 لغات السكريبت هي اللغات التي تعتمد في المقام الول على الوسوم Tags ول يتم تجميعها إل لحظة تنفيذها باستخدام برنامج التنفيذ وهي شائعة في تقنيات الوب ومن أمثلتها.HTML XML PHP 105
XAML المس ئولة عن و صف الواج هة. ح يث يم ثل > <Button و سم البدء و يم ثل > / <Button و سم النها ية. ك ما يم كن ض بط خص ائص عنص ر التح كم من خلل تعيين ها دا خل وسوم البدء حيث تكتب قبل قوس الغلق < حيث تكتب أسم الخاصية ثم يليها علمة = ثم قي مة الخا صية ب ين علمات تنص يص "" فمثل Width= 200 > I Button < Height= 110 تع ني أنشاء عنص ر تح كم من النوع Button بعرض ٢٠٠ نق طة وارتفاع ١١٠ نقطة. وعندما يقوم المبرمج بسحب عنص ر تحكم من ال ـ Toolbox ورميه فوق النموذج فإن Visual Basic يقوم بإنشاء وسوم XAML الخاصة بهذا العنصر. فمثل I عند سحب عنصر التحكم Button ورميه فوق النموذج تضاف الوسوم التالية إلى تعليمات.XAML " <Button Height="23" Margin="102,45,101,0 > Name="Button1" VerticalAlignment="Top">Button</Button وكما يرى القارئ تتعين خصائص هذا العنصر من خلل هذه الوسوم. 1.33.1 تدريب : أنشاء تطبيق WPF.196 من قائمة File أختار.New Project تنفتح النافذة.New Project.197 تأكد أن إصداره NET Framework. المستخدمة هي على القل الثالثة..198 من Templates أختار.WPF Applications.199 في الخانة Name أكتب اسم التطبيق الذي ترغب في إنشاءه أو دع التسمية التلقائية.wpfApplication1.200 أنقر المفتاح.OK 106
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام جديد WPF أنشاء تطبيق :43-5 شكل وتظهر وسوم Window1 يضم نافذة جديدة أسمها جديد WPF يتم أنشاء تطبيق : كما يلي XAML الخاصة بالتطبيق في محرر XAML <Window x:class="window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/pre sentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xam l" Title="Window1" Height="300" Width="300"> <Grid> </Grid> </Window>. لختيارها Window1 أنقر فوق Title= WPF لتص بح XAML في و سوم Title غ ير خا صية : كالتالي XAML وتصبح وسوم Application <Window x:class="window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/ presentation" 107
xmlns:x="http://schemas.microsoft.com/winfx/2006/xam " l >" Title="WPF Application" Height="300" Width="300 > <Grid > </Grid > </Window يتغير عنوان النافذة ليصبح WPF Application يمكن أن يختبر القارئ أن يقوم بتغيير الخصائص الخرى مثل Width و.Height 1.33.2 تدريب : إضافة عناصر التحكم إلى نافذة.WPF في هذا التدريب سنقوم بإضافة عناصر تحكم إلى تطبيق.WPF وهو ما سنقوم به بالطريقة التقليدية بأن نقوم بسحبه من الـ Toolbox ورميه فوق النموذج. ثم سنقوم بضبط بعض خصائص هذه العناصر باستخدام وسوم.XAML قم بسحب TextBox من الـ Toolbox ثم أرميه فوق نافذة التطبيق. أنقر فوق TextBox لتختاره. في نافذة الخصائص ابحث عن الخاصية HorizontalAlignment ثم أجعل قيمتها.Left شكل :44-5 ضبط الخاصية HorizontalAlignment أضبط بقية الخصائص لتوافق الجدول التالي : الضبط الخاصية Top VerticalAlignment 75 Width 26 Heigh 108
مستخدما وسوم XAML قم بتحرير خاصية Width الخاصة بعنصر التحكم TextBox لتص بح ١٤٠ و قم بتغي ير خا صية Margin لتص بح.30,56,0,0 من المفترض أن تكون الوسوم لها الصيغة التالية : " <TextBox Height="26" HorizontalAlignment="Left " Margin="30,56,0,0 " Name="TextBox1" VerticalAlignment="Top > Width="140" / أضف Button إلى واجهة.WPF قم بتعديل وسوم XAML الخاصة بهذا العنصر لتصبح كالمبنية فيما يلي : " <Button Height="23" HorizontalAlignment="Right " Margin="0,59,35,0 " Name="Button1" VerticalAlignment="Top > Width="75">Submit</Button انقر F5 لتنفيذ التطبيق. 1.34 عناصر تحكم WPF الشائعة في هذا القس م نتناول عدد من عنا صر التح كم الخا صة بواجهات WPF الك ثر استخداما. يساعد WPF كما قدمنا في إنشاء واجهات استخدام محسنة الشكل وحتى عناصر التحكم التي استخدمت من قبل في التطبيقات التقليدية يمكن تحسين مظهرها في.WPF الطريقة البسط لضافة عناصر التحكم إلى واجهات WPF هو عن طريق سحبها ورمي ها من Toolbox إلى النماذج ك ما قم نا في التدريبات الس ابقة و في هذه الحالة تظ هر عناصر التحكم في صورتها التقليدية. كما يمكن للمبرمج تغيير مظهر هذه العناصر من خلل تغيير خصائصها سواء من نافذة الخصائص أو من محرر.1XAML 1.34.1 تدريب : إضافة عنصر تحكم لتطبيق WPF وربطه بالتعليمات.201 من قائمة File أختار.New Project تنفتح النافذة.New Project.202 تأكد أن إصداره NET Framework. المستخدمة هي على القل الثالثة. 1 تنصح Microsoft المبرمجين باستخدام البرنامج Microsoft Blend لتطوير وسوم XAML للحصول على مظهر جذاب لعناصر التحكم حيث أن تطوير الوسوم في Visual Studio.NET 2008 يعتبر صعبا I مقارنة بـ.Microsoft Blend 109
.203 من Templates أختار.WPF Applications.204 في الخانة Name أكتب اسم التطبيق الذي ترغب في إنشاءه أو دع التسمية التلقائية.wpfApplication1.205 أنقر المفتاح.OK.206 قم بسحب TextBox من الـ Toolbox ثم أرميه فوق نافذة التطبيق..207 أنقر فوق TextBox لتختاره..208 أضبط خصائص عنصر التحكم TextBox لتوافق الجدول التالي : الضبط الخاصية Top VerticalAlignment 75 Width 26 Heigh أضف Button إلى واجهة.WPF قم بتعديل وسوم XAML الخاصة بهذا العنصر لتصبح كالمبنية فيما يلي : " <Button Height="23" HorizontalAlignment="Right " Margin="0,59,35,0 " Name="Button1" VerticalAlignment="Top > Width="75">Add</Button أضف ListBox إلى واجهة.WPF أنقر مرتين فوق Button1 لتفتح نافذة تحرير التعليمات. أضف التعليمات التالية للحدث. If TextBox1.Text IsNot "" Then ) ListBox1.Items.Add(TextBox1.Text "" = TextBox1.Text End If أنقر F5 لتشغيل البرنامج قم بكتابة أي نص في صندوق النصوص ثم أنقر فوق المفتاح Add لضافته إلى القائمة. 110
1.34.2 قائمة بعناصر تحكم WPF فيما يلي قائمة بأهم عناصر تحكم WPF ووظائفها. عنصر التحكم System.Windows.Controls.Border System.Windows.Controls.Button System.Windows.Controls.CheckBox System.Windows.Controls.ComboBox System.Windows.Controls.Grid System.Windows.Controls.Image System.Windows.Controls.Label System.Windows.Controls.ListBox System.Windows.Controls.RadioButto n System.Windows.Control.TabControl System.Windows.Controls.TextBox وصفه يعرض إطار حول المحتويات مفتاح صندوق تاشير صندوق قائمة مدمجة منط قة الشب كة ال تي يض يف فوق ها المستخدم عناصر التحكم يعرض صور عرض العناوين Labels صندوق قائمة مفتاح راديو يسمح بتنفيذ تبيوبات عدة صندوق النصوص 1.35 أنشاء معالج حدث لعناصر تحكم WPF في هذا القس م نتناول التعا مل مع معالج أحداث Event Handler عنا صر التح كم.WPF يتشا به أنشاء معالج الحدث لعنا صر تح كم WPF مع أنشاء معالج حدث عنا صر التح كم التقليد ية. ل كن الذي يتم يز به أنشاء معالج الحدث لعنا صر تح كم WPF هو أمكان الدمج بين تعليمات Visual Basic ووسوم XAML لتصميم معالج الحدث. ويتم ذلك بان يضاف أ سم الحدث والطري قة المس تخدمة لخص ائص عنص ر التح كم ك ما تبدو في و سوم XAML ثم إضافة التعليمات باستخدام محرر التعليمات. 1.35.1 تدريب : أنشاء معالج حدث لعنصر تحكم من النوع Button.209 من قائمة File أختار.New Project تنفتح النافذة.New Project.210 تأكد أن إصداره NET Framework. المستخدمة هي على القل الثالثة..211 من Templates أختار.WPF Applications 111
.212 في الخانة Name أكتب اسم التطبيق الذي ترغب في إنشاءه أو دع التسمية التلقائية.wpfApplication1.213 أنقر المفتاح.OK.214 أضف Button إلى واجهة.WPF.215 أنقر مرتين فوق.Button1.216 أضف التعليمات التالية : MsgBox("Event handler was created by double-clicking ) the button..217 أضف Button ثاني إلى واجهة.WPF.218 قم بتغيير وسوم XAML الخاصة بالمفتاح Button2 لتصبح كالتالي : " <Button Height="23" Margin="67,96,136,0 " Name="Button2 " VerticalAlignment="Top > Click="ButtonOkClicked">Button</Button ح يث Click أ سم الحدث و ButtonOKClicked هو ا سم معالج الحدث الذي سوف نقوم بتصميمه. أنتقل إلى محرر التعليمات وأضف التعليمات التالية عقب Class Window1 مباشرة. _ Sub ButtonOKClicked(ByVal Sender As Object, ) ByVal e As RoutedEventArgs )" MsgBox("Event handler was created manually. End Sub أنقر F5 لتنفيذ التطبيق. 1.36 أنشاء تطبيق WPF للرسم سنتعلم في هذا القس م الخطوات اللز مة لنشاء ت طبيق WPF يس اعد في ر سم الصور. 112
.219 من قائمة File أختار.New Project تنفتح النافذة.New Project.220 تأكد أن إصداره NET Framework. المستخدمة هي على القل الثالثة..221 من Templates أختار.WPF Applications.222 في الخانة Name أكتب اسم التطبيق.Ink Pad.223 أنقر المفتاح.OK.224 انقر فوق النافذة Window1 لتختارها..225 في نافذة الخصائص قم بضبط خصائص Window1 لتصبح. الخاصية Width Height Title Background الضبط ٣٧٠ ٥٥٠ Ink Pad Brown أن قر مفتاح الفارة اليم ين فوق أي مكان فوق ال ـ Toolbox لتظ هر القائ مة المنسدلة الخاصة به والمبينة في شكل.5-45 أختار Choose Items لتظهر النافذة المبينة في شكل.5-46 انقر فوق التبويب.WPF Components أبحث عن InkCanvas ثم أنقر على المربع المقابل له. ان قر المفتاح OK لتظ هر أيقو نة InkCanvas في ال ـ Toolbox ك ما هو مبين في شكل.5-47 113
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام Choose Items أنقر :45-5 شكل Choose Toolbox Items نافذة :46-5 شكل 114
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام InkCanvas أيقونة :47-5 شكل. ورميها فوق النافذة Toolbox من InkCanvas قم بسحب الـ لتص بح InkCanvas قم بض بط خص ائص Properties نافذة A مس تخدما : كالتالي الضبط Auto Auto Stretch Stretch 9,9,9,68 Light Yellow الخاصية Width Height HorizontalAlignment VerticalAlignment Margins Background إلى اليس ار و button1 أج عل InkCanvas قم بإضا فة مفتاح ين ت حت. على اليمين Button2 : لتصبح كالتالي XAML محرر A مستخدما Button1 غير خصائص <Button Height="23" HorizontalAlignment="Left" Margin="85,0,0,24" Name="Button1" VerticalAlignment="Bottom" Width="75">Clear</Button> : لتصبح كالتالي XAML محرر A مستخدما Button2 غير خصائص <Button Height="23" HorizontalAlignment="Right" Margin="0,0,72,24" Name="Button2" VerticalAlignment="Bottom" Width="75">Close</Button> وأضف التعليمات التالية إلى الحدث Clear أنقر مرتين فوق المفتاح Me.InkCanvas1.Strokes.Clear() وأضف التعليمات التالية إلى الحدث Close أنقر مرتين فوق المفتاح 115
)( Me.Close أنقر المفتاح F5 لتنفيذ البرنامج. مس تخدما I مؤ شر الفأرة قم بالر سم فوق InkCanvas وإذا أحس ست أن الر سم غ ير جميل قم بنقر مفتاح Clear وعندما تنتهي أنقر.Close شكل :48-5 التطبيق Ink Pad أثناء التشغيل. 116
معالجة الخطاء عندما تقوم بكتابة برنامج حاسوب فإن وقوع الخطاء من المور الواردة. يمكن أن تقوم بكتا بة ب عض العبارات بص ورة خاطئة ل يتوقع ها الحا سوب أو أن تكون هناك أخطاء مخفية تتسبب في توقف البرنامج أو السوأ تتسبب في أن يقوم البرنامج بتقديم نتائج خاطئة. عند ما يكون برنام جك يحتوي على أخطاء ي جب عل يك العثور على هذه الخطاء ومعالجت ها هذه العملية التي يطلق عليها أسم إزالة الخطاء.Debugging 1.37 البحث عن الخطاء فيما يلي سنتعلم كيف نقوم بعملية إصلح البرنامج من خلل إزالة الخطاء. ب غض الن ظر عن الطري قة ال تي ق مت ب ها بتص ميم برنام جك أو كتا بة شفر ته فإن الخطاء من المور الواردة. بعض الخطاء تمنع البرنامج من أن يبدأ بعضها الخر يتسبب في انهيار crash البرنامج وأسوء من هذا كله أن يعمل البرنامج ولكن يعطي نتائج خاطئة. بالط بع عند ما ت قع الخطاء ف من الضروري أن تعثر عليها وتقوم بإ صلحها. يطلق على أخطاء البرا مج عا مة ال سم bug ك ما يطلق على عمل ية إزالة هذه الخطاء ال سم.debugging عمل ية إزالة الخطاء هي عمل ية تكرار ية Iterative ف هي عمل ية ستقوم بتكرار ها مرة ب عد مرة أثناء عمل ية البرم جة. فعند ما تكوم بكتا بة جزء من الشفرة ستقوم باختبار البرنامج إذا حدث خطأ ستقوم بالبحث عنه وإصلحه ثم تقوم بتشغيل البرنامج مرة أخرى وتتكرر هذه العملية كل مرة تجد فيها خطا. في مع ظم الحالت لن تر غب في إيقاف تنف يذ البرنا مج لتقوم بالب حث عن الخ طأ وإصلحه. بل ربما كان الفضل أن تقوم بالعثور على الخطأ وقت ظهوره ومعالجته ثم تدع البرنا مج يس تمر في التشغ يل و هي العمل ية ال تي تس مى التحد يث وال ستمرار Edit and.continue 117
تقوم بيئة التطو ير المتكاملة ل ـ Visual Basic Visual Basic IDE بع مل عمليات إزالة الخطاء حيث تحتوي على العديد من الوامر والنوافذ التي تستخدم في البحث عن الخطاء. هذه العناصر التي سنتناولها في أجزاء هذا القسم. 1.37.1 تدريب : استخدام خاصية Edit & Continue المثال الذي سوف نعر ضه في ما يلي يتض من ما يس مى بال ستثناء.exception الستثناءات هي كائنات يتم إنشاءها عندما يشعر البرنامج بأن هناك خطأ قد وقع في التشغيل. هناك أنواع مختل فة من ال ستثناءات ال تي ي تم إنشاء ها وتعت مد هذه النواع على نوع الخ طأ نفس ه. في الو ضع العادي إذا حدث أي ا ستثناء يظ هر صندوق حوار ليو ضح نوع الخ طأ ويساعد في إصلحه..226 من القائ مة File أن قر فوق New Project من نافذة New Project أختار Template ومنها Windows Application ثم أنقر المفتاح.Ok أنقر مرتين فوق النموذج ليظهر الـ.Code Editor قم بكتابة الشفرة التالية في عامل الحدث :Form_Load Dim number As Integer = 1 "" = Dim numbers As String ) MsgBox(numbers + 1 أضرب المفتاح F5 لتشغيل البرنامج. هذا البرنامج سوف يتعطل وتظهر نافذة ال ستثناء المبي نة في شكل.6-49 ال ستثناء حدث نتي جة حدوث خ طأ كتا بي Typographical error ح يث قام ال مبرمج بكتا بة المتغ ير النص ي numbers م حل المتغير الصحيح number داخل وظيفة.MsgBox لحظ أن البرنامج لم ينقطع عن العمل فقط هو توقف عن العمل منتظرا A أن تقوم بإصلح الخطأ وهو ما يمثل خاصية.Edit and Continue في نافذة Code Editor قم باستبدال numbers+1 بـ.number+1 أضرب F5 ليستمر البرنامج في العمل. 118
شكل :49-6 نافذة الستثناء 1.38 أنواع الخطاء فيما يلي نتعرف على أنواع الخطاء التي تحدث عن كتابة البرامج. ح تى هؤلء ال مبرمجين المحترف ين يقومون بالخطاء لكن هم يعرفون ك يف يتعرفون على أخطاءهم وكيف يمكنهم إزالتها. أنهم ينظرون إلى الخطاء كجزء من عملية البرم جة. قبل أن نقوم بتعلم كيف نقوم بعملية إزالة الخطاء debugging سيكون من الفيد أن نتعرف على أنواع الخطاء الممكن وقوعها. تنقس م الخطاء الحاد ثة أثناء عمل ية البرم جة إلى ثل ثة أنواع أخطاء التجم يع Compilation Error وأخطاء التشغ يل Run-time Error والخطاء المنطق ية Logic.Error 1.38.1 أخطاء التجميع Compilation Errors أخطاء التجميع والتي يطلق عليها أيضا I أسم أخطاء المجمع Compiler Error هي تلك الخطاء التي تمنع برنامج من العمل. عندما تقوم بضرب المفتاح F5 يقوم Visual Basic بتجميع شفرة برنامج إلى اللغة الثنائية binary Language التي يفهما الحاسوب. لو أن مج مع Visual Basic صادف شفرة ل يعرف ها فإ نه ي قع في خ طأ التجم يع و من ثم يتوقف عن تجميع البرنامج وبالتالي ل يعمل البرنامج. مع ظم أخطاء البرم جة ت قع نتي جة أخطاء في كتا بة الشفرة. م ثل أن يقوم ال مبرمج بكتا بة أي من الكلمات المحجوزة بطر قة خاطئة أو ينس ى و ضع علمات التنص يص أو علمات الفاصلة أو مثل ã كتابة End If بدون كتابة If قبلها. 119
من حسن الحظ أن Visual Basic مصمم بحيث يكتشف معظم هذه الخطاء أثناء تحرير البرنامج نفسه وهو ما سنتعلمه في جزء لحق من هذا الفصل. 1.38.2 أخطاء التشغيل Run-time Errors أخطاء التشغيل كما هو واضح من أسمها تحدث أثناء تشغيل البرنامج. وعادة ما يكون سبب هذه الخطاء العمليات التي ل يمكن للحاسوب أن يقوم بها. من أكثر هذه العمليات التي تسبب أخطاء التشغيل شيوعا I هو القسمة على الصفر. ع ند وقوع م ثل هذا النوع من الخطاء يم كن يمك نك ا ستخدام أدوات إزالة الخطاء التي تقدمها Visual Basic حتى يتسنى أن تعثر على هذه الخطاء وتقوم بمعالجتها. 1.38.3 الخطاء المنطقية Logic Error الخطاء المنطق ية هي أك ثر أنواع أخطاء البرم جة خطرا I فهذه الخطاء ينش أ عن ها خ طأ في سريان البيانات دا خل البرنا مج و من ثم ظهور نتائج خاطئة غ ير متوق عة عن العلميات التي يقوم بها الحاسوب. ومن جانب آخر هي بمثابة أخطاء خفية بحيث يصعب على أدوات إزالة الخطاء في Visual Basic التعرف عليها. ومن ثم فإن هناك عامل كبير على المبرمج في مراجعة برنامجه ليتعرف على مكان الخطأ المنطقي. 1.39 العثور على أخطاء التجميع وإصلحها فيما يلي نتعلم كيفية العثور على أخطاء التجميع وإصلحها. ك ما تعلم نا في ما سبق أن أخطاء التجم يع تنش أ عن وجود شفرة غ ير مفهو مة بالنس بة لمجمع.Visual Basic ولن هذا النوع من الخطاء يعوق البرنامج عن بدأ التشغيل فمن الفضل العثور على هذه الخطاء وعلجها قبل الشروع في تشغيل البرنامج. العثور على هذا النوع من الخطاء لحس ن ال حظ بس يط. عند ما تضرب المفتاح F5 ويتعثر المجمع في أي من هذه الخطاء تظهر على الشاشة صندوق حواري يحمل العبارة There were build errors. Continue إذا اخترت Yes فإنه سوف يتم تشغيل آخر نسخة من برنامج قبل أن تقوم بكتابة الشفرة الخاطئة أما إذا اخترت No فإن البرنامج سوف يتوقف عن العمل وتظهر نافذة.Error List 120
نافذة Error List تقوم بعرض معلومات حول أخطاء التجم يع تض م هذه النافذة المبينة في الشكل اللحق وصف الخطأ وموقعه من الشفرة. لو نقرت نقرا ï مزدوجا I فوق أي من الخطاء المبينة في نافذة Error List فإن السطر الذي يحتوي على الخطأ يتم تظليله. يمك نك ضرب المفتاح F1 لي تم عرض وثائق المس اعدة Help Documentation ل ـ Visual Basic للتعرف على معلومات أكثر حول الخطأ وكيفية إصلحه. شكل :50-6 نافذة Error List وعادة ما يقوم محرر الشفرة لـ Visual Basic Visual Basic Code Editor بتعي ين قس م كبير من أخطاء التجم يع أثناء تحر ير شفرة البرنا مج من خلل الخا صية المسماة.IntelliSense فعندما تقوم بكتابة أي كلمة من الكلمات المحجوزة أو الوظائف أو بارامترات الوظائف يقوم ال ـ IntelliSense بإظهار قائ مة تحتوي على جم يع الكلمات المحجوزة أو الوظائف أو بارامترات الوظائف المشابهة لتنتقي منها ما يناسبك استخدامك. 1.39.1 تدريب : العثور على أخطاء التجميع وإصلحها.227 من القائ مة File أن قر فوق New Project من نافذة New Project أختار Template ومنها Windows Application ثم أنقر المفتاح.Ok أنقر مرتين فوق النموذج ليظهر الـ.Code Editor قم بكتابة الشفرة التالية في عامل الحدث :Form_Load End If عندما تضرب المفتاح Enter يظهر خط أزرق متموج تحت العبارة.End If قم بتغيير هذه الشفرة لتصبح كما التي If 1 < 2 Then End If 121
تلحظ أن الخط الزرق المتموج اختفى. قم بإضافة الشفرة التالية بعد بين If و.End If )" MgBox("Hello أضرب المفتاح.F5 تظ هر العبارة There were build errors. Would?you like to continue and run the last successful build أختار No تظهر نافذة Error List تبين أن الخطأ هو Name 'MgBox' is.not declared أن قر نقرأ a مزدوجا A فوق الخ طأ ثم قم بتعد يل العبارة الخاطئة لتص بح.("MsgBox("Hello أضرب المفتاح F5 مرة أخرى وأنظر هل يعمل البرنامج. 1.40 العثور على أخطاء التشغيل وإصلحها فيما يلي نتعلم كيف يمكن أن نعثر على أخطاء التشغيل ونقوم بإصلحها. كما تعلمنا سابقا I أن أخطاء التشغيل تنجم عن عمليات غير مسموح بها. عند وقوع أي من هذه الخطاء يتو قف البرنا مج عن الع مل وتظ هر ر سالة خ طأ ح تى يمك نك التعرف على وقوع خطأ تشغيل وتقوم بإصلحه. مع ظم الخطاء التشغيل ية ت قع نتي جة لخ طأ في الشفرة نفس ها كأن تنس ى أن تقوم بتخص يص قي مة لمتغ ير ق بل أن تقوم با ستخدامه. ع ند تشغ يل برنا مج ووقوع أخطاء تشغ يل يتو قف البرنا مج عن الع مل ويظ هر الص ندوق الحواري مس اعد ال ستثناء Exception Assistant في نافذة.Code Editor عند ما يحدث هذا فإن البرنا مج يد خل حالة تس مى Break Mode حيث يمكنك أن تقوم بعمليات إزالة الخطاء. صندوق الحوار مس اعد ال ستثناء Exception Assistant يحتوي على و صف للخ طأ ونص ائح حول سبب وقوع الخ طأ. بالن قر على هذه النافذة تظ هر وثائق المس اعدة ال تي تحتوي على المزيد من التعليمات القيمة. 122
1.40.1 تدريب : العثور على أخطاء التشغيل وإصلحها.228 من القائ مة File أن قر فوق New Project من نافذة New Project أختار Template ومنها Windows Application ثم أنقر المفتاح.Ok أنقر مرتين فوق النموذج ليظهر الـ.Code Editor قم بكتابة الشفرة التالية في عامل الحدث :Form_Load Dim miles As Integer = 0 Dim hours As Integer = 0 Dim speed As Integer = 0 miles = 55 speed = miles / hours )" MsgBox(CStr(speed) & " miles per hour أضرب المفتاح F5 لتنف يذ البرنا مج. تظ هر النافذة مس اعد ال ستثناء Exception Assistant تح مل الر سالة Overflow Exception was unhandled ك ما يظ هر خط متق طع ير بط ما ب ين النافذة مس اعد ال ستثناء Exception Assistant ومكان الخطأ من البرنامج. ضع مؤ شر الفأرة فوق المتغ ير miles وأتر كه لثوا ني سوف تظ هر نافذة صفراء صغيرة نافذة النصح tool tip window تحمل فقط.miles 55 كرر ن فس الخطوة ٥ مع ا ستبدال miles ب ـ hours تل حظ أن الر سالة أصبحت.hour 0 وحيث أن القسمة على صفر غير معترف فيها في الكومبيوتر فإن الخطأ تولد هنا. أضف السطر التالي بعد سطر :miles = 55 hours = 2 أعد تنفيذ البرنامج وأنظر إن كان سوف يعمل أم ل. 123
1.41 استخدام النافذة الوسيطة Intermediate Window في هذا القس م نس تكشف إمكانات اختبار التعليمات با ستخدام النافذة الو سيطة.Intermediate Window ف في القسم السابق عرفنا كيف يمكن الستدلل على الخطاء با ستخدام مس اعد ال ستثناء Exception Assistant ل كن في ب عض الحيان ل يكون من الوا ضح أ ين الخ طأ ويس تحيل على ال مبرمج أن يعرف مكان الخ طأ بدون أن يقوم بتعد يل التعليمات. في هذه الحالة تكون الداة المثلى لمعال جة الخطاء هي النافذة الو سيطة.Intermediate Window عندما يكون البرنامج في الـ Break Mode فإن النافذة الوسيطة يمكن ان تستخدم لتنف يذ قس م من التعليمات وتقي يم المتغيرات والت عبيرات. على سبيل المثال إذا تولد خ طأ في أثناء التشغ يل run-time بس بب متغ ير فارغ )لم تخص ص له قي مة( فإن ال مبرمج ير يد أن يتعرف على قيمة المتغير وهو ما تسمح به النافذة الوسيطة كما تسمح بتغيير قيمة المتغير واختبار كيف سيكون سلوك بقية البرنامج بناء على هذا التغيير. كما يمكن للمبرمج تعديل التعليمات في النافذة الوسيطة بنفس الطريقة التي يستخدمها في نافذة تحرير التعليمات.Code Editor ولتقييم التعبيرات أو المتغيرات يمكن للمستخدم أن يقوم بكتا بة عل مة ا ستفهام ) ( متبو عة بالمتغ ير أو بالت عبير المطلوب تقيي مه ثم يضرب المفتاح Enter من لوحة المفاتيح لتظهر النتيجة في السطر اللحق. في التدريب التالي نتعرف كيف يمكن اختبار التعليمات باستخدام النافذة الوسيطة. 1.41.1 تدريب : اختبار التعليمات في النافذة الوسيطة.229 من القائ مة File أن قر فوق New Project من نافذة New Project أختار Template ومنها Windows Application ثم أنقر المفتاح.Ok.230 من صندوق الدوات قم بس حب عنص ر تح كم من النوع TextBox وعنص ر تح كم من النوع Button ثم أرميهم على النموذج..231 أن قر مرت ين فوق المفتاح لتف.Button_Click.232 أضف التعليمات التالية : 124 تح محرر التعليمات على معالج الحدث
Dim miles As Integer = 0 Dim hours As Integer = 0 Dim speed As Integer = 0 ) miles = CInt(Textbox1.Text ) hours = CInt(Textbox2.Text speed = miles / hours )" MsgBox(CStr(speed) & " miles per hour أضرب المفتاح F5 لتنف يذ البرنا مج. أد خل القي مة ١٠٠ في صندوق ال نص الول والقيمة ٠ في صندوق النص الثاني. أن قر المفتاح Button1 يتو قف البرنا مج عن الع مل وتظ هر نافذة مس اعد ال ستثناء Exception Assistant مع ر سالة خ طأ من النوع " Overflow Exception was " unhandled في النافذة الوسيطة تحت بيئة التطوير المتكاملة IDE أنظر شكل - 6-51 اكتب miles ثم أضرب المفتاح Enter تظهر القيمة ١٠٠ في السطر اللحق. أكتب hours ثم أضرب المفتاح.Enter تظهر القيمة ٠ في السطر اللحق. أك تب hours=4 ثم أضرب المفتاح Enter ثم اك تب hours وضرب Enter ثانية. تلحظ أن قيمة hours أصبحت.٤ وبهذه الطريقة قد قمنا بتغيير قيمة hours بدون أن نغير البرنامج الصلي. أضرب المفتاح F5 ليتم استكمال البرنامج وتظهر النتيجة في الرسالة. شكل :51-6 النافذة الوسيطة 1.42 كشف الخطاء المنطقية يتو فر في Visual Basic أدات ين ل ستكشاف الخطاء ه ما ال ـ Breakpoints أو نقاط اليقاف والتشغيل خطوة بخطوة.stepping 125
يم كن لل مبرمج أن يقوم بإضا فة نق طة تو قف Breakpoint ع ند أي سطر من التعليمات وع ند تنف يذ البرنا مج يتو قف التنف يذ ع ند نق طة التو قف وينت قل الع مل إلى بيئة التطوير المتكاملة IDE في وضعية اليقاف Break Mode حيث يمكن للمبرمج التعرف على أي معلومات خا صة بالبرنا مج لح ظة توق فه. فيم كن التعرف على قي مة متغ ير أو اختبار ت عبير في النافذة الو سيطة ك ما تقدم أو تعد يل التعليمات با ستخدام خا صية Edit and.continue بمجرد انتقال البرنا مج إلى وضع ية إيقاف يم كن لل مبرمج تنفيذه خطوة بخطوة لي تم تنفيذ سطر من التعليمات ثم السطر التالي وهكذا وذلك بضرب المفتاح F7 في لوحة المفاتيح ليتم تنفيذ السطر ثم ضرب نفس المفتاح مرة أخرى لتنفيذ السطر التالي وهكذا. إذا كان الس طر يحتوي على وظي فة Function أو إجراء فر عي Sub Procedure فإ نه ع ند الن قر على F8 ي تم النتقال إلى دا خل هذه الوظي فة أو الجراء الفرعي. وعند انتهاء تعليمات الوظيفة أو الجراء الفرعي يعود التنفيذ إلى البرنامج الرئيسي. ك ما يم كن لل مبرمج أن يتفادى الدخول إلى دا خل الجراء وذلك عن طر يق أن يضرب المفتاحين SHIFT+F8 معا.I 1.42.1 تدريب : اكتشاف خطأ منطقي.233 من القائ مة File أن قر فوق New Project من نافذة New Project أختار Template ومنها Windows Application ثم أنقر المفتاح.Ok.234 من صندوق الدوات قم بس حب عنص ر تح كم من النوع TextBox وعنص ر تح كم من النوع Button ثم أرميهم على النموذج..235 أن قر مرت ين فوق المفتاح لتف تح محرر التعليمات على معالج الحدث.Button_Click.236 أضف التعليمات التالية : ) Dim minutes As Integer = CInt(Textbox1.Text ) Dim miles As Double = CDbl(Textbox2.Text Dim hours As Double = 0 hours = minutes / 60 126
)) MsgBox("Average speed " & GetMPH(hours, miles أضف تعليمات لعمل هذه الوظيفة : Function GetMPH(ByVal miles As Double, ByVal hours As _ ) Double As String ) GetMPH = CStr(miles / hours End Function أضرب المفتاح F5 لتنفيذ البرنامج أكتب ١٠ في عنصر التحكم TextBox1 و ٥ في عنصر التحكم TextBox2 ثم اضرب المفتاح.Button1 لتظهر الرسالة " Average "speed 0.03333334 بالرغم من الجابة الصحيحة هي ٣٠ ميل في الس اعة. وهذا يدل على وقوع خطأ في منطق البرنامج. 1.42.2 تدريب : إضافة نقاط اليقاف إلى تعليمات البرنامج أنتقل إلى محرر التعليمات ابحث عن السطر الذي يحتوي التعبير = hours minutes / 60 وأنقر بمؤشر الفأرة فوقه ثم اضرب المفتاح F9 لضافة نقطة إيقاف. السطر يتم تظليله باللون الحمر القاتم علمة على وجود نقطة إيقاف. أضرب المفتاح F5 لتنف يذ البرنا مج وأك تب ١٠ في صندوق ال نص الول وخمس ة في الص ندوق الثا ني ثم أن قر المفتاح.Button1 البرنا مج يتو قف ع ند بلوغ نق طة اليقاف ويص بح الس طر الذي يحتوي علي ها مظلل A باللون ال صفر. قف بمؤ شر الفأرة فوق المتغير hours تظهر لك ملحوظة tip بأن قيمة هذا المتغير هي ٠ كرر نفس الشئ بالنسبة للمتغير minutes لتحصل على القيمة.١٠ أضرب المفتاح F8 لتنف يذ الس طر الذي يحتوي على الت عبير = hours minutes / 60 والنتقال إلى السطر الذي يليه وتح قق بن فس الطري قة الس ابقة من قيم المتغيرات في العبارة MsgBox("Average speed " & GetMPH(hours, ((miles ح يث من المفترض أن تكون قي مة hours هي ٠.١٦٦٦٦٦٦٧٢ وقي مة miles هي.٥.٠ 127
أضرب المفتاح F8 لتنف يذ الس طر التالي ل حظ أن التنف يذ أنت قل إلى دا خل الوظي فة GetMPH قم بالتعرف على قي مة المتغيرات تل حظ أن المتغ ير miles أصبحت قيمته ٠.١٦٦٦٦٦٦٧٢ بينما أصبحت قيمة المتغير hours هي 5.0 أي أنه حدث خطأ في تخصيص قيم المدخلت وهكذا تولد الخطأ المنطقي. 1.42.3 تدريب : علج الخطأ المنطقي قم بتعديل هذا السطر ليصبح في الصورة )) MsgBox("Average speed " & GetMPH(hours, miles قم بإزالة نقطة اليقاف وذلك بأن تنقل مؤشر الفأرة للسطر الذي يحتوي على نقطة اليقاف وأضرب المفتاح.F9 أعد تشغيل البرنامج وأختبر نتائجه. 1.43 التعليقات Comments التعليقات هي سطور يضيفها المبرمج ليبين لنفسه أو لشركائه في تطوير التطبيق ما الذي يجب أن تختزنه المتغيرات من بيانات والعمليات التي تنفذها تعليمات البرنامج المختلفة. وأهمية التعليقات أنها تجعل البرنامج مفهوم بالنسبة للمطور أو المطورين الخرين مما يسهل مهامهم التطويرية. ويعتبر أي سطر يبدأ برمز الفاصلة العالية هو بمثابة تعليق ل يلتفت إليه البرنامج عند التنفيذ بينما يقوم محرر التعليمات بعرضه باللون الخضر الفاتح دللة على أن هذا السطر من التعليقات. 128
مقدمة إلى تطبيقات قواعد البيانات الغرض من إنشاء أي ت طبيق هو معال جة البيانات. في مع ظم الت طبيقات ال تي ا ستخدمناها كأمثلة في الفص ول الس ابقة كا نت البيانات تد خل يدويا I ثم تختزن في متغيرات داخل البرنامج. لكن في كثير من التطبيقات الحقيقية يتم اختزان البيانات في خارج التطبيق في أشكال مختل فة مص ممة لختزان البيانات. و ما أ هم هذه الشكال قوا عد البيانات.Database في هذا القسم سوف نتعرض إلى تطوير تطبيقات قواعد البيانات باستخدام Visual Basic.NET 2008 مع مقدمة بسيطة إلى تقنية Linq التي تقدمها Microsoft لول مرة في.Visual Studio 2008 1.44 قواعد البيانات Database هذا القس م ل يس الغرض م نه تقد يم قوا عد البيانات بص ورة تفص يلية ول كن تقد يم مفاهيمها الساسية حتى يمكن للدارس أن يفهم ما هو مطلوب منه بنهاية هذا القسم. تعرف قاعدة البيانات بأن ها تجم يع لبيانات منظ مة لتمث يل ظاهرة ما. تتكون قاعدة البيانات من جداول Tables يمثل كل جدول منها جزء من الظاهرة ويتكون كل جدول من حقول ) Fields أو أعمدة (Columns و سجلت ) Records أو صفوف( ح يث تم ثل الس جلت أو صاف العنا صر المختل فة ال تي يص فها الجدول بين ما تم ثل الح قل و صف محدد لجميع الحالت. وترتبط هذه الجداول بعلقات بينها تماثل العلقات في العالم الحقيقي. وسنضرب مثال I لتقريب أفكار قواعد البيانات للذهن لنفترض أن هناك قاعدة بيانات الغرض من ها و صف مدر سة إذا فالمدر سة هي الظاهرة المطلوب تمثيل ها. هناك أرب عة موضوعات أ ساسية ع ند و صف المدر سة هي المدر سون والطلب والفص ول والمواد التعليم ية. كل موضوع من هذه المواض يع سيتم حف ظه في جدول مس تقل. فمثل I جدول المدر سون سيحتوي على أعمدة عن أ سم المدرس ودرج ته الوظيف ية والمادة العلم ية ال تي يقدم ها. بين ما كل صف سيمثل سجل المدرس. ك ما أن هناك جدول سيمثل الطلب. وآ خر 129
للفصول ولن كل فصل ينشغل بعدد من الطلب فإن هناك رابطة يجب إنشاءها لتبين مكان الطالب في أي فصل. 1.45 أنشاء قاعدة بيانات غالبا I ما ي تم أنشاء قوا عد البيانات با ستخدام برا مج خا صة م ثل Access أو SQL Server وبص ورة مس تقلة تماما I عن Visual Studio ثم ي تم كتا بة الت طبيقات ال تي تع مل بمثا بة واجهات ا ستخدام لقوا عد البيانات با ستخدام.Visual Basic وح يث أن نا لس نا في معرض الحديث عن برامج إدارة قواعد البيانات فإن Visual Studio.NET 2008 يتوفر م عه نس خه مخف فة لبرنا مج إدارة قاعدة البيانات SQL Server Compact Version ل ستخدامها في إنشاء قوا عد البيانات. و هو البرنا مج الذي سوف نقوم با ستخدامه في هذا القسم. 1.45.1 أنشاء قاعدة البيانات.237 من File أختر.New Project من نافذة New Project أختار.Windows Form Application ال سم التلقائي في الخا نة Name هو WindowsApplication قم بتغييره إلى.DBApp أنقر المفتاح.OK من القائمة Project أختر Add New Item لتظهر النافذة المبينة في شكل.7-52 أنقر فوق.Local Database في الخانة Name أكتب اسم قاعدة البيانات وهو.FirstDB أنقر.Add تظ هر نافذة معالج Data Source Configuration Wizard المبن ية في شكل 7-53 أختر.Cancel 130
تظ هر قاعدة البيانات الجديدة FirstDB في نافذة Solution Explorer ك ما في شكل.7-54 شكل :52-7 نافذة Add New Item 131
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام Data Source Configuration Wizard نافذة :53-7 شكل 132
شكل :54-7 قاعدة البيانات FirstDB في نافذة.Solution Explorer 1.45.2 إضافة جدول إلى قاعدة البيانات من القائ مة View أختار.Server Explorer لتظ هر هذه النافذة ك ما هي مبينة في شكل.7-55 أنقر فوق علمة + المجاورة لقاعدة البيانات.FirstDB أنقر يمين فوق Tables واختر.Create Table لتظهر نافذة New Table المبينة في شكل.7-56 في الخانة Name حدد أسم الجدول وليكن.Addresses أنقر تحت Column Name واكتب أسم الحقل الول وهو.FirstName دع الـ Data Type كما هو. غير قيمة الـ Length لتصبح.50 قم بإنشاء حقول لتكون خصائصها كما هي بينة في الجدول التالي : 133
شكل :55-7 نافذة Server Explorer 134
شكل :56-7 نافذة.New Table اسم الحقل LastName StreetAddress City Phone نوع البيانات nvarchar nvarchar nvarchar nvarchar طول الحقل 50 50 50 50 أنقر المفتاح OK ليتم إنشاء الجدول. 1.45.3 إضافة المفتاح الساسي Primary Key في النافذة Server Explorer أختار Tables ثم من ها اختار الجدول.Address أن قر يم ين وأختار Edit Table Scheme لتظ هر النافذة المبي نة في شكل.7-57 135
شكل :57-7 نافذة Edit Table أمام اسم الح قل FirstName وتحت الح قل Allow NullS غير القيمة من Yes إلى No وغير قيمة Primary Key لتصبح.Yes كرر ذات الجراء السابق على الحقل.LastName أنقر المفتاح.OK بهذه الطريقة جعلنا من الحقلين FisrtName و LastName حقلي مفتاح أساسي. 1.45.4 إضافة البيانات إلى الجدول في النافذة Server Explorer أختار Tables ثم من ها اختار الجدول.Address أن قر يم ين وأختار Show Table Data لتظ هر النافذة المبي نة في شكل.7-58 136
شكل :58-7 نافذة عرض وإدخال البيانات قم بإدخال البيانات حتى تكون مثل المبينة في شكل.7-59 شكل :59-7 البيانات المدخلة للجدول أخيرا A من قائمة File أختار.Save All 137
1.46 التصال بقاعدة البيانات في هذا القس م نتعلم ك يف يم كن للت طبيق أن يتص ل بقاعدة البيانات و من ثم ا ستخدام أدوات Visual Studio.NET لتص فح محتويات قاعدة البيانات وإضا فة نس خة من محتويات ها للت طبيق نفس ه و هو ما سنقوم به في التدريبات التال ية ح يث سوف نقوم بإنشاء تطبيق يتصل بقاعدة البيانات ألتي أنشلناها من قبل. تأكد أن قد قمت بإغلق التطبيق السابق قبل تنفيذ الجراءات التالية..238 من القائمة File أختار.New Project أختار.Windows Form Application في الخانة Name أكتب اسم التطبيق.AddressApp أنقر المفتاح.OK من القائمة Data أختار.Show Data Sources تظهر النافذة كما هي مبينة في شكل.7-60 في نافذة Data Sources أنقر.Add New Data Source يظهر المعالج Data Source Configuration Wizard المبينة في شكل.7-61 أختار Database وأنقر.Next أن قر المفتاح.New Connection تظ هر نافذة Choose Data Source المبينة في شكل.7-62 من القائ مة Data Source أختار Microsoft SQL Server Compact.3.5 138
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام Data Sources نافذة :60-7 شكل.Data Source Configuration نافذة المعالج :61-7 شكل 139
شكل :62-7 النافذة.Choose Data Source أن قر المفتاح.Continue تخت في النافذة Choose Data Source وتظ هر النافذة Add Connection المبينة في شكل.7-63 شكل :63-7 النافذة Add Connection أنقر المفتاح.Browse 140
في نافذة اختيار الملف أنت قل للمكان الذي ح فظ عل يه الت طبيق الذي سبق أن قمنا بإنشائه في 1.45 ثم أختار قاعدة البيانات FirstDB أنظر شكل.7-64 أنقر المفتاح.Open شكل :64-7 اختيار ملف قاعدة البيانات. أن قر المفتاح Ok حتى ي تم إغلق النافذة Add Connection ونر جع لنافذة معالج.Data Source Configuration Wizard أنقر Next لتظهر الرسالة المبينة في شكل.7-65 شكل :65-7 رسالة عن إمكانية نقل البيانات إلى المشروع. تسأل هذه الرسالة عما إذا كنت ترغب في نقل البيانات إلى المشروع أختار.Yes 141
في النافذة التال ية من المعالج Data Source Configuration Wizard والمبينة في شكل 7-66 تأكد من اختيار Yes, save connection as ودع السم المقترح كما هو وانقر.Next شكل :66-7 حفظ الوصلة في الص فحة Choose your database objects من المعالج Data Source Configuration Wizard أن ظر قم بالتأش ير على جم يع محتويات جدولك. أنقر.Finish تظهر قاعدة البيانات FisrtDB في الـ Solution Explorer كما تظهر الوصلة FirstDBDataSource في نافذة.Data Sources من القائمة File أختار.Save All 142
شكل :67-7 الصفحة Choose Your Database Objects 1.47 عرض البيانات في واجهة رسومية في القسم السابق تعلمنا أن نقوم بعمل وصلة لقاعدة البيانات في هذا القسم نتعلم كيف نس تخدم هذه الو صلة ح تى نتم كن من بلوغ البيانات وعرض ها في واج هة ر سومية بالت طبيق خاصتنا..239 أفتح التطبيق السابق المسمى.AddressApp من النافذة Solution Explorer أختار.Form1.vb أنقر فوق.View Designer أنقر فوق.Data Source من النافذة Data Source قم بسحب الجدول Address ورميه فوق النموذج.Form1 143
تظهر نتيجة لذلك عدد من عناصر التحكم كما هو مبين في شكل.7-68 شكل :68-7 عناصر التحكم التي أضيفت للنموذج.Form1 أختار عنص ر التح كم AddressesDataGridView و من نافذة الخص ائص أجعل الخاصية Dock تساوي.Fill أضرب المفتاح F5 في لوحة المفاتيح لتنفيذ البرنامج. 144
شكل :69-7 البرنامج عند التشغيل. 1.48 تحديث البيانات في هذا القس م سوف نتعلم ك يف يمكن نا أنشاء واج هة لدخال وتحد يث البيانات في قاعدة بيانات محلية. فيما سبق قمنا بإنشاء نسخة من قاعدة البيانات في التطبيق وأطلقنا عليها أ سم قاعدة البيانات المحل ية وهذا يع ني أن هذه البيانات ليس ت هي تلك المحفو ظة في قاعدة البيانات الخارجية ولكنها مجرد صورة منسوخة عنها محفوظة في المشروع يطلق عليها اسم.Dataset و في كل مرة نقوم في ها بتشغ يل البرنا مج ي تم ع مل صورة عن قاعدة البيانات الصلية وتصبح هي الـ Dataset لكن عندما يتم تعديل الـ Dataset فإن هذا ل ينعكس في قاعدة البيانات الخارجية. لعلك لح ظت في واج هة الت طبيق المبي نة في شكل 7-69 أن هناك أيقو نة Save عند ما يقوم المس تخدم بالن قر فوق Save فإن البيانات المدخلة إلى ال ـ Dataset يم كن حفظ ها في قاعدة البيانات الخارجية. لكن ماذا إذا نسى المستخدمين النقر فوق هذا المفتاح!. لتجنب مثل هذه المواقف يمكن للمبرمج أن يقوم بإضافة تعليمات لحفظ البيانات عند إغلق البيانات وهذا ما سوف نقوم به هنا..240 أفتح المشروع السابق. 145
من نافذة Solution Explorer أختار قاعدة البيانات FirstDB وتأ كد من خص ائصها أن الخا صية Copy to Output Directory فعالة ومضبو طة على.Copy if Newer أختار النموذج.Form1 أختر.View Designer أخ تر AddressesDataGridView من فوق النموذج ثم أضرب المفتاح Delete من لوحة المفاتيح لحذفه. أختار التبويب Data Source في.Solution Explorer أنقر فوق علمة + إلى جوار قاعدة البيانات FirstDB لتظهر محتوياتها. قم بس حب ور مي كل عنص ر من عنا صر قاعدة البيانات فوق النموذج Form1 يظ هر كل مرة عنص ري تح كم وا حد من النوع Label وال خر من النوع TextBox أنظر شكل.7-70 شكل :70-7 تعديل واجهة التطبيق. 146
أنقر مرتين فوق النموذج لتفتح محرر التعليمات.Code Editor أختار من قائمة الحداث Events الحدث.FormClosing في معالج الحدث Form1_FormClosing اكتب التعليمات التالية : )( Me.AddressesBindingSource.EndEdit Me.AddressesTableAdapter.Update(Me.FirstDBDataSet.Addre ) sses هذه التعليمات تج عل الكائن AddressesTableAdapter ينس خ أي تعديلت البيانات تحدث في الـ Dataset إلى قاعدة البيانات الساسية. أضرب المفتاح F5 لتنف يذ البرنا مج. قم بتغي ير ب عض البيانات وأ ضف ب عض السجلت ثم أغلق النموذج. أضرب المفتاح F5 لتنف يذ البرنا مج وتأ كد أن التغييرات ال تي ق مت ب ها قد نفذت. 1.49 عرض البيانات من جداول مترابطة في القس ام الس ابقة تعلم نا أن نقوم بإنشاء نماذج لدخال وتحد يث البيانات إلى قاعدة البيانات. في هذا القسم نتناول كيف يمكن عرض البيانات من جدولين منفصلين في نموذج. 1.49.1 تدريب : التصال بقاعدة البيانات.Northwind.241 من القائمة File أختار.New Project أختار.Windows Form Application أنقر المفتاح.OK أختار من التبويب Data Sources في نافذة.Solution Explorer أنقر فوق.Add New Data Source تظهر نافذة Data Source Configuration Wizard المبينة في شكل 7-71 147
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام Data Source Configuration Wizard نافذة :71-7 شكل.Database أختار.Next أنقر.New Connection أنقر فوق المفتاح 7-72 المبينة في شكل Add Connection تظهر النافذة 148
شكل :72-7 النافذة Add Connection أنقر فوق المفتاح.Browse من المجلد \ Program Files\Microsoft SQL Server Compact \Edition\v3.5\Samples أختار قاعدة البيانات.Northwind أنقر المفتاح.Open في النافذة Add Connection أنقر.OK في النافذة نافذة Data Source Configuration Wizard أنقر.Next أجب بـ Yes عن السؤال الذي سوف يظهر. تأكد أن المربع المعنون Yes, save the connection as معلم. في الصفحة التالية والمعنونة بـ Choose Your Database Objects أنقر فوق علمة + بجوار Tables لترى جميع الجداول ثم أنقر المربعين المجاورين لـ Order Details و.Products أنقر المفتاح.Finish 149
ي تم إضا فة قاعدة بيانات محل ية للمشروع هي NorthwindDataSet وتظ هر في التبويب.Data Sources أنقر فوق NorthwindDataset في التبويب.Data Sources في النافذة Properties أجعل الخاصية Copy to Output Directory لها القيمة.Copy if newer في القائمة File أختر Save All وأحفظ المشروع. 1.49.2 تدريب : عرض البيانات المترابطة يم كن من خلل التبو يب Data Sources ا ستكشاف العل قة Relationship ب ين الجدول ين المترابط ين. في هذا التدر يب مثل I إذا نقرت فوق الجدول Products ستجد أن الجدول Order Details موجود في نهاية الجدول Product إشارة إلى أن هناك ثمة علقة بين الجدول Product الجدول.Order Details وإذا قام المبرمج بسحب الجدول Order Details ورميه فوق النموذج فإن العلقة بينه وبين الجدول Products تظهر في صورة الستعراض المشترك للسجلت كما سوف نفعل فيما يلي. في التبو يب Data Sources أن قر فوق عل مة + في الجدول Product لستعراض الحقول التي يحتويها. إلى جوار الحقل Product Name أنقر على السهم ثم أختار عنصر التحكم.Label قم بس حب الح قل Product Name من التبو يب Data Sources إلى النموذج. قم بس حب الجدول Order Details من ذ يل قائ مة محتويات الجدول Product إلى النموذج ليتم عرضه في نافذة جدول. أنقر F5 لتنفيذ البرنامج. جرب استعراض محتويات الجدولين. حول برمجة تطبيقات قواعد البيانات 150
التقنية المعروضة في هذا القسم تناسب مقدمة مبسطة حول برمجة تطبيقات قواعد البيانات والتي يلزم لتطويرها بصورة مهنية اللمام بتقنية ADO.NET المكملة لـ Visual Basic.NET 2008 والمتعل قة ببرم جة ت طبيقات قوا عد البيانات. وهذه التقن ية مص احبة ل ـ Visual Basic.NET منذ الصدارة 2003 بينما تميزت Visual Studio.NET 2008 بتقنية جديدة لبرمجة تطبيقات قواعد البيانات هي تقنية.Linq 151
استخدام الملفات كما قدمنا من قبل في القسم السابع تتعامل معظم التطبيقات مع بيانات مختزنة خارج الت طبيق و فق القس م الس ابع تعرف نا ك يف يم كن التعا مل مع البيانات المختز نة في قوا عد البيانات. ل كن هناك كث ير من الت طبيقات ال تي تتعا مل مع بيانات مختز نة خارج ها في أشكال أخرى غ ير قوا عد البيانات أهم ها الملفات. في هذا القس م سنتعرف على المهام ال ساسية لل ستخدام الملفات في Visual Basic.NET 2008 وهذه المهام تعت مد على الكائن My.Computer.FileSystem والذي يسهل على المبرمج التعامل مع الملفات المختلفة.1 في هذا القس م سوف نقوم ببناء ت طبيق يهدف إلى ا ستعراض الص ور المختز نة على المجلد My Pictures ك ما سنقوم بالتعرف على الكائن My ونتعلم ك يف يم كن ا ستخدامه لقراءة وكتابة البيانات في ملف نصي. 1.50 عرض الملفات المختزنة في مجلد في هذا القس م سوف نتعرف على ا ستخدام الكائن My.Computer.FileSystem للتعرف على أ سماء الملفات المختز نة في مجلد مع ين. وبدا ية سوف نعرف المجلد Folder كمس احة يختزن علي ها Microsoft Windows الملفات ويقدم Microsoft Windows مجموعة من المجلدات المخصصة لحفظ أنواع معينة من الملفات للتبسيط على المستخدم مثل المجلد My Document و.2My Pictures وكما سبق أن قدمنا موضوع تدريبنا هو إنشاء متصفح للصور الموجودة في المجلد My Pictures وذلك با ستخدام عنص ري التح كم List Box لعرض ملفات الص ور و Picture Box لعرض الصور نفسها. 1 وبغض النظر عن نظام التشغيل الذي يعمل البرنامج من خلله. 2 في Microsoft Windows XP تعرف هذه المجلدات ب ـ MyDocument و MyPictures وهكذا بين ما في Microsoft Windows Vista تعرف ب ـ Documents و Pictures وهكذا بدون My لذلك ي جب على القارئ أ خذ هذا في العتبار عند كتابة التعليمات الخاصة بالتطبيقات الواردة في هذا القسم. 152
1.50.1 تدريب التعرف على الملفات يم كن أن نس تخدم الطري قة My.Computer.FileSystem.FileExists للمعر فة ما إذا كا نت هناك ملفات مختز نة في مجلد مع ين أو ل ك ما يم كن الب حث عن ملفات محددة بال سم بوا سطة هذه الطري قة. ول سترجاع ملف مع ين يم كن ا ستخدام الطري قة My.Computer.FileSystem.GetFiles لهذا الغرض. ك ما يم كن ا ستخدام العلمات الخا صة Wild Characters للب حث عن الملفات. كذلك يم كن ا ستخدام الكائن My.Computer.FileSystems.SpecialDirectories لتخص يص مجلد مع ين م ثل MyPictures وهو يتيح للمبرمج أن يسترجع قائمة بأسماء جميع الملفات المختزنة في هذا المجلد. الن نفذ الجراءات التالية لتنفيذ واجهة البرنامج وعرض الملفات المختزنة في My.Pictures.242 من القائمة File أختار.New Project أختار.Windows Form Application في الخانة Name أكتب اسم التطبيق.PictureViewer أنقر المفتاح.OK أضف على النموذج عناصر التحكم ListBox و PictureBox و.Button أضبط خصائص عناصر التحكم المكونة للواجهة لتتوافق مع الجدول التالي. العنصر Form1 PictureBox1 ListBox1 Button1 الخاصية Text Size BorderStyle SizeMode Size Location HorizontalScrollBar Size Location Name Text Size القيمة Picture Viewer 472,400 FixedSingle StretchImage 285,370 12,12 True 82,370 314,12 LoadPictures Load Pictures 32,368 153
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام 395,12 Location واجهة التطبيق :73-8 شكل Event handler مرت ين لتف تح ال ـ LoadPictures أن قر فوق المفتاح. الخاص به : أضف التعليمات التالية إلى الحدث Me.ListBox1.Items.Clear() Me.PictureBox1.ImageLocation = "" For Each founimage As String In _ My.Computer.FileSystem.GetFiles(_ My.Computer.FileSystem.SpecialDirectories.MyPictures,_ FileIO.SearchOption.SearchTopLevelOnly,_ "*.gif", "*.jpg") Me.ListBox1.Items.Add(founImage) Next My.Computer.FileSystem.GetFiles في هذه التعليمات تس تخدم الطري قة وتتع ين الملفات المس ترجعة بهذه الطري قة بثل ثة مدخلت ل سترجاع قائ مة بأ سماء الملفات هو المجلد ثم المتغ ير يه و نة عل سترجاع الملفات المختز هو المجلد المطلوب ا الول My.Computer.FileSystem.SpecialDierctories.MyPictures 154
الثا ني طري قة الب حث كأ حد عنا صر العائلة FileIO.SearchOption والعنص ر SearchTopLevelOnly يع ني الب حث في المجلد المحدد دون المجلدات الفرع ية وثالثا نوعية الملفات المطلوب البحث عنها كمتغيرات نصية. 1.50.2 عرض الصور لعرض الصور قم بتنفيذ الجراءات التالية : في نافذة Code Editor أختار ListBox1 من القائمة.Class Name من القائمة Method Name أختر الطريقة.SelectedIndexChanged في عامل الحدث ListBox1_SelectedIndexChanged أضف التعليمات التالية : Me.PictureBox1.ImageLocation = Me.ListBox1.SelectedItem أنقر المفتاح F5 لتنفيذ البرنامج. أن قر المفتاح Load Pictures لتظ هر قائ مة بأ سماء ملفات الص ور في صندوق القائمة قف أختر أي من هذه الملفات لعرضه. شكل 74-8 ك التطبيق أثناء التنفيذ 155
1.50.3 تحسين عمل البرنامج قد يكون من غير المناسب في بعض الحيان أن نقوم بعرض أسم الملف كامل ) I أي أ سمه محتويا I على المس ار( ك ما قد تد عو الحا جة أحيانا I للتعرف على المس ار الرئيس ي ف قط. و في كل الحالت ين فإن الكائن My.Computer.FileSystem يس اعدنا كثيرا I ح يث يم كن ا ستخدام الطري قة My.Computer.FileSystem.GetParentPath للتعرف على مس ار الملف ف قط دون ا سم الملف والطري قة My.Computer.FileSystem.GetName للحصول على أسم الملف فقط دون اسم المسار. 1.51 كتابة البيانات في ملف نصي في هذا القس م سوف نتعلم ك يف نقوم بالكتا بة دا خل ملف نص ي با ستخدام الكائن.My.Computer.FileSystem وذلك با ستخدام الطري قة My.Computer.FileSystem.WriteAllText وال تي تقوم بكتا بة البيانات في ملف نصي Text File فإذا كان هذا الملف غير موجود تقوم الطريقة بإنشائه ويمكن للمستخدم أن يحدد ما إذا كان يريد أنشاء ملف جديد لهذه البيانات المرسلة للملف في حالة عدم وجود ملف أو يلزم برنامجه بتعديل ملف موجود عن طريق استخدام True أو False للبارامتر append في الصيغة المستخدمة. في التدريب التالي نقوم بإضافة نص إلى ملف نصي..243 أفتح المشروع السابق. أضف مفتاح Button جديد لواجهة البرنامج. قم بتعديل خصائص المفتاحين لتصبح كالتالي : العنصر LoadPictures Button2 الخاصية Size Location Name Text Size Location القيمة 32,84 395,12 FavoritesAdd Add to Favorites 32,84 395,102 أنقر مرتين فوق المفتاح FavoritesAdd وأضف التعليمات التالية : If PictureBox1.ImageLocation <> "" Then 156
' Add the selected picture to the favorites text file. _ My.Computer.FileSystem.WriteAllText(FavoritePictures, ) Me.ListBox1.SelectedItem & ",", True End If أضف هذه التعليمات تحت Public Class Form1 مباشرة : = Dim FavoritePictures As String My.Computer.FileSystem.SpecialDirectories.MyDocuments " & "\FavoritePictures.txt أضرب F5 لتنفيذ البرنامج. أختر احد الصور. أنقر المفتاح.Add to Favorites أذهب إلى مكان الملف على My Document ثم قم أفتح الملف وتأكد أنه قد كتب الملف فيه. 1.52 قراءة البيانات من ملف نصي في هذا القسم نتعرف على كيفية قراءة البيانات من ملف نصي. يمكن قراءة البيانات النص ية من الملف النص ي با قة ستخدام الطري.My.Computer.FileSystem.ReadAllText ل كن في كث ير من الحوال تكون البيانات في الملفات النص ية مفص ولة بوا سطة عل مة الفا صلة وهذا النوع من الملفات يطلق عليها السم comma limited text files وهو من أنواع الملفات النصية شائعة الستخدام لختزان البيانات لذلك تو جد طري قة مباشرة لقراءة البيانات من هذا النوع من الملفات هي الطريقة.My.Computer.FileSystem.OpenTextFieldParser في التدر يب التالي سوف نقوم باختبار ما إذا كان الملف FavoritePictures موجود في المجلد My Document فإذا كان موجود سوف يقوم البرنامج بقراءة البيانات من الملف.244 أفتح المشروع السابق. أضف مفتاح Button جديد لواجهة البرنامج. 157
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام : قم بتعديل خصائص المفتاح لتصبح كالتالي القيمة LoadFavorites Load Favorites 32,84 395,193 الخاصية Name Text Size Location العنصر Button2 : وأضف التعليمات التالية LoadFavorites أنقر مرتين فوق المفتاح ' Clear the picture box and the list box. Me.ListBox1.Items.Clear() Me.PictureBox1.ImageLocation = "" وهذه التعليمات ثم أ ضف التعليمات التال ية لتع قب التعليمات الس ابقة مباشرة موجود أم غ ير FavoritePictures تخ تبر ما إذا كان الملف If عبارة عن جملة أ ما فإذا كان الملف غ ير موجود فإن البرنا مج سوف ين فذ التعليمات اللح قة. موجود.else إذا كان غير موجود فسيتم تنفيذ التعليمات في الكتلة If My.Computer.FileSystem.FileExists(FavoritePictures) Then ' Add code to read text from a file. Else MsgBox("There is no favorites file yet. Click Load" & " Pictures," & vbcrlf & "select a picture, and" & " then click Add to Favorites.", MsgBoxStyle.OkOnly, "Picture Viewer") End If وهي التعليمات التي بالتعليمات التالية Then استبدل جملة التعليق التالية لـ لقراءة محتويات الملف OpenTextFieldParsar قة تخدم الطري تس.FavoritePictures ' Open the FavoritePictures text file by using ' OpenTextFieldParser. Dim MyReader As Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = My.Computer.FileSystem.OpenTextFieldParser( FavoritePictures) 158
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام MyReader.SetDelimiters(",") وهذه التعليمات أ ضف التعليمات التال ية ع قب التعليمات الس ابقة مباشرة.FavoritePictures وظيفتها تكرار عملية قراءة البيانات من الملف ' Using a comma (,) as a delimeter, parse each field in ' the text file and add it to the list box. Dim textfields As String() = MyReader.ReadFields() For Each currentfield As String In textfields If My.Computer.FileSystem.FileExists(currentField) Then Me.ListBox1.Items.Add(currentField) End If Next ' Close the TextFieldParser. MyReader.Close().F5 أنقر المفتاح. ليتم تحميل ملفاتك المفضلة فقط Load Favorites أنقر المفتاح حذف ملف 1.53 قة ستخدام الطري نا حذف ملف با يف يمكن م نتعلم ك في هذا القس من المنا سب أن يقوم ال مبرمج بس ؤال.My.Computer.FileSystem.DeleteFile مس تخدم برنام جه حول ما إذا كان متأ كد من رغب ته في حذف الملف أم ل وبناء على إجاب ته. ينفذ عملية الحذف أو يلغيها. أفتح المشروع السابق.245. جديد لواجهة البرنامج Button أضف مفتاح : قم بتعديل خصائص المفتاح لتصبح كالتالي القيمة DeleteFavorites Delete Favorites 32,84 395,283 159 الخاصية Name Text Size Location العنصر Button3
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام : وأضف التعليمات التالية DeleteFavorites أنقر مرتين فوق المفتاح ' Check that the favorites text file exists. If My.Computer.FileSystem.FileExists(FavoritePictures) Then ' Ensure that user wants to delete the favorites text file. If MsgBox("Are you sure you want to send the favorites" & " file to the Recycle Bin?", MsgBoxStyle.YesNo, "Delete Favorite Pictures") = MsgBoxResult.Yes Then ' Clear the picture box and the list box. Me.ListBox1.Items.Clear() Me.PictureBox1.ImageLocation = "" ' Delete the favorites file. My.Computer.FileSystem.DeleteFile(FavoritePictures) End If Else MsgBox("The favorites file does not exist.") End If F5 أنقر المفتاح Delete Favorite أنقر وفق المفتاح My Document تأكد أن الملف قد تم حذفه من 160
أسس برمجة الكائنات كما قدمنا من قبل تعتمد البرامج التي يتم تطويرها باستخدام Visual Basic.NET 2008 على الكائنات Objects بص ورة أ ساسية هناك من الكائنات ما تقدم ها الل غة نفس ها مثل عناصر التحكم والنماذج وهناك الكائنات التي يقوم المبرمج بنفسه ببناءها لداء حاجات معينة في برنامجه. يتس م مفهوم الكائن بوجود مفهوم آ خر هو مفهوم الفئة Class مص احب له وهذا المفهوم يم كن أن نقد مه كالمخ طط الهند سي للكائن ف هو يحتوي على البيانات ال تي من المفترض أن يتعا مل الكائن مع ها والطرق ال تي سيستجيب ب ها ومجمو عة الحداث ال تي سيستجيب لها. ومن ثم يتم بناء الكائنات على شاكلته. 1.54 ما هي الفئة Class ك ما قدم نا يمكن نا أن نن ظر على الفئة على أن ها المخ طط الهند سي للكائنات أو في صورة أك ثر حرف ية ومص داقية على أن ها كائن مثالي مجرد سيتم بناء الكائنات على مثاله. ون حن نقوم بالتعا مل مع هذه الفئات م نذ بدا ية ا ستخدامنا ل ـ Visual Basic.NET 2008 فمثل عنصر التحكم TextBox هو في واقع المر عبارة عن فئة وفي كل مرة نقوم بسحبه إلى سطح النموذج فإن نا في الوا قع نقوم بإنشاء مثال instance عن هذه الفئة أو من خلل مصطلح مبسط نقوم بإنشاء كائن. وعلى هذا فإن الكائن textbox من الممكن أن نقوم بإنشائه بالطري قة التقليد ية ال تي تعت مد على سحب العنص ر ورم يه أو نقوم بكتا بة التعليمات اللز مة لنشائه وذلك بصورة بسيطة كما هو مبين في السطر التالي : Dim mytextbox as New TextBox أما أنشاء الفئات واستخدامها فسوف نتعرف عليها بصورة تفصيلية في أجزاء متقدمة من هذا القسم. 1.54.1 ماذا بداخل الفئة في القس م ٣.١.٣ تعرف نا على الخص ائص والطرق والحداث وتعلم نا ك يف أن ل كل الكائنات خص ائصها ال تي تص فها والطرق ال تي تتص رف ب ها والحداث ال تي تس تجيب ل ها. 161
وبالم ثل فإن الفئة ل ها خص ائص وطرق وأحداث )يطلق علي ها في ب عض الحيان العضاء.(Members سنستخدم مثال بس يط لف هم ما هي الفئة. الحس اب البن كي لو قدمناه كفئة ا سمها BankAccount ف من المم كن أن يكون ل ها خص ائص م ثل ر قم الحس اب AccountNumber والقي مة الحد ية للحس اب AccountBlance وطرق م ثل حس اب الر بح CalcualteInterest وأحداث م ثل تغ ير القي مة الحد ية.BalanceChanged أي حس اب بن كي ل بد أن يكون له هذه الخص ائص والطرق والحداث ل كن ع ند أنشاء كائن BankAccount1 كمثال عن الفئة BankAccount فإ نه سيكون له خص ائصه وطر قه وأحدا ثه المس تنسخة عن الفئة BankAccount وال تي تختلف عن الخص ائص والطرق والحداث الخاصة بالكائن BankAccount2 المثال عن ذات الفئة. تو جد أحداث / أعضاء يطلق علي ها الحداث الخا صة Private و هي تلك الحداث التي يتم تنفيذها داخل الكائن ول يتم تنفيذها خارجه. فمثل I الفئة BancAccount يمكن أن تحتوي على حدث لحساب القيمة الحدية حيث يقوم البرنامج بقراءة القيمة الحدية لكن ل يقوم بتغيير هذه القيمة. يمكن للمبرمج أن يقوم بإخفاء العضاء داخل الفئة بإعلنهم private أو يمكنه أن يتيحهم للستخدام خارج الكائن عن طريق إعلنهم Public كما يمكنه أن يسمح للمرور إلى الخواص ول يسمح بتغييرها عبر إعلنها خواص للقراءة فقط.ReadOnly التعليمات التالية تبين الشكل الذي تكون عليه الفئة. Class BankAccount Private AccountNumber As String Private AccountBalance As Decimal )( Public Sub UpdateBalance ' add code to recalculate balance. End Sub ReadOnly Property Balance() As Decimal Get Return AccountBalance End Get End Property 162
End Class 1.55 أنشاء الفئة في هذا القس م سوف نخ طو خطوة جديدة للمام ح يث سوف نقوم بإنشاء كائن يم ثل شخص ثم نقم بتخزينه لستخدامه في برامج أخرى. يمكن إنشاء الفئة بإحدى ثلثة طرق : بين التعليمات الخاصة بنموذج في أي من تطبيقات النوافذ. في وحدة نمطية Module مستقلة ولكنها ملحقة بتطبيق النوافذ. في مشروع مكتبة فئة Class Library مستقل. 1.55.1 أنشاء الفئات في المشروع ل عل القارئ قد ل حظ أ نه في التدريبات الس ابقة أ نه ع ند الن قر فوق النموذج مرت ين ينفتح محرر التعليمات ويرى القارئ ما يشابه التالي : Public Class Form1 Private Sub Form1_Load... End Sub End Class في عبارة بسيطة النموذج Form يعتبر في حد ذاته فئة لذلك فهي تبدأ بـ Class وتنت هي ب ـ End Class وأي تعليمات يقوم ال مبرمج بإضافت ها دا خل هذه الفئة تع تبر جزء منها. وبالرغم من أن النموذج Form يحتوي على فئة واحدة فقط إل أن المبرمج يمكنه أن يض يف المز يد من الفئات عن طر يق أن يحرر ها مبتدئا I ب ـ Class ومنتهيا I ب ـ End Class وذلك ب عد End Class الخا صة بالنموذج Form و في تلك الحالة يص بح محرر التعليمات يحتوي على فئتين في آن واحد كما هو مبين فيما يلي : Public Class Form1 ' Form1 code here End Class Public Class MyFirstClass ' Your class code here End Class 163
وتعتبر الفئات المنشأة بهذه الطريقة قاصرة العمل على المشروع الذي يضمها فقط ل كن إذا كان ال مبرمج يخ طط أن يس تخدم هذه الفئة في أك ثر من مشروع فيمك نه أن يقوم بوضعها في وحدة نمطية كما سيأتي. 1.55.2 الوحدات النمطية للفئات الوحدة النمط ية Module للفئة هي عبارة عن ملف تعليمات مس تقل يحتوي على واحدة أو أكثر من الفئات ولنها ملف مستقل فيمكن استخدامها في أكثر من مشروع. يمكن أنشاء الوحدات النمطية للفئات بطريق من أثنين : عن طر يق إضا فة وحدة نمط ية إلى مشروع ت طبيق وذلك من خلل الن قر على القائمة Project واختيار Add New Item ثم اختيار.Class عن طريق أنشاء مشروع مكتبة فئة.Class Library أ ما في هذا التدر يب سوف نقوم بإنشاء مكت بة فئة مس تقلة وذلك متبع ين الخطوات التالية :.246 في القائمة File أنقر فوق.New Project في التبويب Template أختار.Class Library في الخانة Name أكتب Persons ثم أنقر.Ok ي تم ف تح مشروع مكت بة فئة جد يد ويعرض حرر التعليمات وحدة نمط ية للفئة بعنوان Class1.vb كما هو مبين في شكل 9-75 في النافذة Solution Explorer أن قر فوق Class1.vb مس تخدما A مفتاح الفأرة اليمن وأختار Rename ثم قم بتسمية الفئة.Person.vb أختر من القائمة File الخيار.Save All في نافذة Save Project أختار.Save 164
1.56 إضافة الخصائص إلى الفئة في القسم السابق بينا كيف يمكن إنشاء فئة وقمنا بإنشاء فئة هي الفئة Person التي من المفروض أن تمثل أشخاص عاديين وحيث أن أي ش خص له مجمو عة من الخص ائص م ثل ال سم والس ن فل بد أن تكون للفئة القدرة على تمث يل هذه الخص ائص. و هو ما سنحاول تقديمه في هذا القسم. شكل :75-9 مشروع Class Library في محرر التعليمات يم كن إضا فة الخص ائص للفئة بطري قة من اثنت ين إ ما في صورة حقول Fields مباشرة أو كخصائص في إجراءات.Procedure s Properties وكذلك يمكن إعلن هذه الخص ائص كخص ائص عا مة Public أو خا صة للكتا بة ف قط WriteOnly أو خواص للقراءة فقط.ReadOnly 1.56.1 الحقول وخصائص الجراءات يمكن النظر إلى الحقول على أنها متغيرات عامة يمكن الوصول إليها من دا خل أو من خارج الفئة. تس تخدم الحقول بص ورة مثلى لختزان الق يم ال تي ل تحتاج إلى تح قق validate على سبيل المثال البيانات من النوع ال ـ.Boolean في حالة الفئة Person 165
يمكننا أن نجعل هناك خاصية بالسم Alive وتكون من النوع Boolean لتبين ما إذا كان الشخص حي أم ميت. كل ما يحتاجه المبرمج لضافة خاصية / حقل إلى الفئة التي يعمل علة تطويرها هو تعليمات إعلن المتغيرات البسيطة كالتالية : Public Alive As Boolean لكن للسف فإن معظم الخصائص التي تضاف إلى الكائنات تحتاج إلى تحقق ومن ثم فإنه يتم إضافتها كمتغيرات إجرائية. تتكون المتغيرات الجرائية من ثلثة أقسام : إعلن عن متغير خاص Private لختزان قيمة الخاصية. إجراء Get ويستخدم لسترجاع قيمة المتغير إجراء Set لتعيين قيمة المتغير. بهذه الطري قة يم كن أنشاء خا صية كمتغ ير إجرائي في الفئة التعليمات التال ية تنش ئ خاصية Name للكائن.Person Private namevalue As String Public Property Name() As String Get Name = namevalue End Get ) Set(ByVal value As String namevalue = value End Set End Property في الس طر الول من هذه التعليمات ي تم العلن عن متغ ير خاص Private من النوع String با سم namevalue والذي سوف يختزن قي مة الخا صية. المتغ ير الجرائي يبدأ مع العبارة Public Property وينتهي مع العبارة.End Property الجراء Get يحتوي على التعليمات التي سوف يتم تنفيذها عندما تريد أن تقرأ قيمة الخا صية فعلى سبيل المثال إذا ك نت تر غب في قراءة الخا صية Person.Name فإن التعليمات السابقة سوف تعيد القيمة المختزنة في.nameValue 166
الجراء Set يحتوي على التعليمات ال تي ي تم تنفيذ ها ع ند تخص يص قي مة للمتغ ير namevalue تس تخدم كقي مة ي تم تمرير ها كبارام تر لهذا الجراء. فمثل I إذا ق مت بكتا بة تعليمات بهذا الش كل Person.Name= John فإن القي مة John سوف ي تم تمرير ها كبارام تر إلى الجراء Set بين ما ستقوم التعليمات الموجودة دا خل هذا الجراء بتخص يص هذه القيمة للمتغير.nameValue قد تسأل نفسك سؤال لماذا ل أخصص القيمة إلى الحقل Name مباشرة وأقرأها منه مباشرة عوضا I عن كل هذه المتا عب. باختص ار هذا يت يح لك أن تتح قق من أن الق يم المخص صة للمتغيرات تتوا فق مع تص ميميك للفئة أم ل فمثل I في الحياة اليوم ية ل يو جد ش خص يتكون ا سمه أو يحتوي على أرقام وعلى هذا يمك نك إضا فة تعليمات في الجراء Set لتختبر القيم المدخلة وهل تتوافق مع فرضية أن السماء ل تحتوي على أرقام أم ل. في التدر يب التالي سوف نقوم بإضا فة مجمو عة من المتغيرات الجرائ ية للفئة.Person.247 قم بفتح المشروع السابق.Person قم بإضافة التعليمات التالية عقب العبارة Public Class Person Private firstnamevalue As String Private middlenamevalue As String Private lastnamevalue As String Public Alive As Boolean قم بإضافة التعليمات التالية عقب هذه التعليمات Public Property FirstName() As String Get FirstName = firstnamevalue End Get ) Set(ByVal value As String firstnamevalue = value End Set End Property Public Property MiddleName() As String 167
Get MiddleName = middlenamevalue End Get ) Set(ByVal value As String middlenamevalue = value End Set End Property Public Property LastName() As String Get LastName = lastnamevalue End Get ) Set(ByVal value As String lastnamevalue = value End Set End Property من القائمة File أختر.Save All 1.56.2 الخصائص من النوع ReadOnly والنوع WriteOnly في بعض الحوال يتم ض بط الخاصية وتخصيص قي مة ل ها ل تتغ ير أثناء التشغ يل. على سبيل المثال خاصية مثل رقم الموظف ل يجب أن تتغير حيث يمكن أن تقرأ من خلل البرنامج لكن ل يسمح للبرنامج بتغييرها أبدا. الكلمة الساسية ReadOnly تستخدم لتعلم المجمع أن الخاصية للقراءة فقط أي ل يم كن تعديل ها أثناء التشغ يل. وإذا حاولت بالخ طأ أثناء كتاب تك للبرنا مج أن تقوم بتخصيص قيمة للخاصية المعرفة ReadOnly فإن محرر التعليمات سوف يعتبر هذا خطأ. لنشاء خاصية من النوع ReadOnly فإ نك سوف تقوم بإنشاء متغ ير إجرائي كما يلي : Private IDValue As Integer ReadOnly Property ID() As Integer Get ID = IDValue 168
End Get End Property لحظ انه ل وجود للجراء Set في هذا التعريف. بالمثل فإن الكلمة الساسية WriteOnly تسمح للخاصية أن يتم تخصيصها ولكنها ل تس مح لل مبرمج أن يقرأ قي مة هذه الخا صية على سبيل المثال قد ير غب ال مبرمج في استخدام هذا النوع من الخواص في تمرير كلمة السر بين برامج مختلفة. وأيضا I نشاء خاصية من هذا النوع يمكنك أن تستخدم تعليمات مثل التالية Private passwordvalue As String WriteOnly Property Password() As String ) Set(ByVal value As String passwordvalue = value End Set End Property لحظ غياب الجراء.Get م ثل هذا النوع من الخص ائص ReadOnly و WriteOnly يمكن ا ستخدامه في امثل الطرق عندما يكون المستخدم يرغب في تحويل قيمة إلى أخرى فعلى سبيل المثال خا صية الع مر عند ما تقوم بتخص يصها ثم تعاود قراءت ها ب عد عام فإن القي مة المختز نة في ها سوف تكون خاطئة. ولعلج هذه المشكلة في الفئة Person يم كن أن نض يف خا صيتين الولى BirthDate من النوع WriteOnly والثان ية Age من النوع ReadOnly ح يث ترجع الخاصية Age الفارق بين قيمة الخاصية الولى وتاريخ اليوم. لنفعل ذلك اتبع الخطوات التالية :.248 افتح المشروع السابق.Person ا ضف الس طر التالي ب عد مجمو عة العلنات )الس طور الرب عة الول ب عد (Public Class Person Private birthyearvalue As Integer قم بإضافة التعليمات التالية ي نهاية التعليمات التي أضفتها فيما سبق. WriteOnly Property BirthYear() As Integer 169
) Set(ByVal value As Integer birthyearvalue = value End Set End Property ReadOnly Property Age() As String Get Age = My.Computer.Clock.LocalTime.Year birthyearvalue End Get End Property من القائمة File اختار Save All 1.57 إضافة الطرق إلى الفئات في موضع سابق عرفنا أن لكل فئة مجموعة من الطرق Methods التي تتصرف لها الفئة. في هذا القسم سنتعرف على كيفية تصميم الطرق وإضافتها إلى الفئات. 1.57.1 الطرق الخاصة بالفئة يم كن ن نقدم الطرق الخا صة بالفئات كأن ها روتينات فرع ية Subroutines أو وظائف Functions داخل الفئة. فعلى سبيل المثال الفئة Account يمكنها أن تحتوي على طري قة Recalculate لعادة لتحد يث القي مة الحد ية للحس اب ك ما يمكن ها أن تحتوي على وظيفة CurrentBalance لسترجاع هذه القيمة الحدية للحساب. التعليمات التي تمثل هذه الطرق يبينها ما يلي : )( Public Sub Recalculate ' add code to recalculate the account. End Sub Public Function CurrentBalance(ByVal AccountNumber As Integer) As Double ' add code to return a balance. End Function على حين أن معظم الطلق داخل الفئات هي من النوع الـ Public فإن المبرمج قد يرغب في بعض الحيان أن يقوم بإنشاء طرق تعمل داخل الفئة فقط فمثل الفئة person قد 170
تحتوي على طريقة لحساب عمر العميل وفي هذه الحالة يقوم المبرمج بتعريف هذه الطريقة بالكل مة ال ساسية Private ح تى ل يم كن ا ستدعاءها من خارج الطري قة. التعليمات التال ية تستخدم لنشاء طريقة من النوع Private داخل الفئة. Private Function CalcAge(ByVal year As Integer) As Integer CalcAge = My.Computer.Clock.LocalTime.Year - year End Function يم كن لل مبرمج لحقا I أن يقوم بتغي ير التعليمات ال تي تس تخدم في حس اب قي مة CalcAge ومع ذلك لن تتأثر التعليمات التي تستخدم الطريقة.CalcAge وهذا الوضع هو الت عبير الم ثل عن وا حد من أ هم مفاه يم البرم جة الموج هة للكائنات و هو التغل يف.Encapsulation في التدريب التالي سوف نقوم بإضافة طريقتين إلى الفئة Person الطري قة الولى من النوع ال ـ Public ا ستعادة أ سم العم يل والثان ية وظي فة من النوع Private لحس اب سن العميل :.249 افتح المشروع السابق.Person أ ضف الس طور التال ية ع قب تعريفات المتغيرات ال تي أضفنا ها في القس م السابق : Public Function FullName() As String If middlenamevalue <> "" Then FullName = firstnamevalue & " " & middlenamevalue " " & & lastnamevalue Else FullName = firstnamevalue & " " & lastnamevalue End If End Function Private Function CalcAge(ByVal year As Integer) As Integer CalcAge = My.Computer.Clock.LocalTime.Year - year End Function قم بتعديل خاصية Age لتصبح كالتالي : 171
ReadOnly Property Age() As String Get ' Age = My.Computer.Clock.LocalTime.Year birthdatevalue ) Age = CalcAge(birthYearValue End Get End Property من القائمة File اختار Save All 1.57.2 مفهوم الحمل الزائد Overloading في هذا القس م سوف نتعلم ك يف يمكن نا إضا فة أك ثر من ش كل من ن فس الطري قة في الفئة الواحدة. في التدريب السابق قمنا بإضافة الطرق إلى الفئة Person في بعض الحالت يجب أن يأخذ المبرمج في اعتباره أن الطريقة لبد أن تستجيب لنماط مختلفة من المدخلت وبالم ثل يم كن أن تن تج أنماط مختل فة من المخرجات. و في هذه الحالة يل جأ المس تخدم مفهوم الحمل الزائد Overloading حيث يقوم بتصميم الفئة أي كتابة التعليمات الخاصة بها عدة مرات بحيث تكون كل مرة متسقة مع المدخلت المختلفة المتوقعة. في ما يلي تعليمات لح مل زائد لطري قة واحدة مرت ين بح يث تكون مرة تق بل مدخلت من النوع النصي وفي المرة الثانية تقبل مدخلت من النوع الرقمي الصحيح. ) Public Sub TestFunction(ByVal input As String ) MsgBox(input End Sub ) Public Sub TestFunction(ByVal input As Integer )) MsgBox(CStr(input End Sub عند ما ير غب ال مبرمج في ا ستدعاء هذه الطري قة من دا خل برنام جه يتو قف تنف يذ الطريقة على نوع البيانات المارة إليها فإذا تم تمرير بيانات نصية يتم تنفيذ الطريقة الولى وي تم طبا عة ر سالة تحتوي على البيانات النص ية المدخلة للطري قة أ ما إذا تم تمر ير عدد صحي فإنه سوف يتم تحويله بداية إلى نصي ثم يتم طباعته في رسالة. يمكن للمبرمج عمد العديد من الطرق تحت مظلة مفهوم الحمل الزائد. 172
سنبين في التدر يب التالي ك يف يمكن نا إضا فة طري قة بمفهو مي ح مل زائد في الفئة.Person.250 افتح المشروع السابق.Person أضف السطور التالية قبل :End Class Public Function MiddleInitial() As String ) MiddleInitial = Left$(middleNameValue, 1 End Function ) Public Function MiddleInitial(ByVal period As Boolean As String " MiddleInitial = Left$(middleNameValue, 1) & ". End Function من القائمة File اختار Save All 1.58 إضافة حدث للفئة تعلمنا فيما سبق أن لكل كائن خصائص وطرق وأحداث وعرفنا كيف يمكن تصميم وإضا فة الخص ائص والطرق إلى الفئة. في هذا القس م نتعرض على أ ساليب تص ميم وإضا فة معالجات الحداث إلى الفئات. 1.58.1 العلن عن الحداث وإنشاءها هناك خطوتين يجب أن يلزمهما المبرمج عند إضافة حدث على الفئة. الول ي جب أن يقوم بالعلن Declaration عن الحدث ثانيا I إنشاء الحدث. إنشاء الحدث يعني أن يعلم المبرمج المجمع عن وجود هذا الحدث. لضافة حدث إلى الفئة يقوم المبرمج بإعلن الحدث عن طريق الكلمة الساسية.Event وهذا يعني أن الكائن المثال على الفئة يمكنه أن يستخدم الحدث المعلن. فعلى سبيل المثال يم كن أن نض يف الحدث AgeCalculated للفئة Persons ثم ننشأ الحدث في الطريقة CalcAge وعند استدعاء هذه الطريقة يمكن إضافة تعليمات إضافية مع عملية حساب العمر..251 افتح المشروع السابق.Person 173
أضف السطر التالي فوق مجموعة تعريفات الخصائص : ) Public Event AgeCalculated(ByVal Age As Single هذا السطر يمثل العلن عن الحدث. استبدل السطور التي تحتويها الطريقة CalcAge بالسطور التالية : Private Function CalcAge(ByVal year As Integer) As Integer Dim Age = My.Computer.Clock.LocalTime.Year - year ) RaiseEvent AgeCalculated(Age CalcAge = My.Computer.Clock.LocalTime.Year - year End Function من القائمة File اختار Save All 1.58.2 تكوين معالج الحدث إذا كان على ال مبرمج أن يك تب تعليمات تس تجيب لحدث ما أي يك تب معالج حدث Event handler عند ذلك يجب الربط ما بين الحدث ومعالج الحدث. ويستخدم في ذلك الكلمات المحجوزة Handles أو.Add Handler الكل مة المحجوزة Event Handler تس مح لل مبرمج أن ير بط الحدث بالمعالج أثناء التص ميم على ح ين تس مح الكل مة المحجوزة Handles بربط الحدث بمعالج الحدث أثناء التشغيل. هذه الكلمة المحجوزة Handles يمكن إضافت ها إلى نها ية أي روي تن فر عي لتقوم بن فس ع مل الحدث. فعلى سبيل المثال يم كن أن نض يف حدث با سم AgeCalculated الذي يمك نه ا خذ أي عدد صحيح وكذلك الروت ين الفرعي سيقوم بأخذ هذه القيمة الرقمية الصحيحة. ) Private Sub person1_agecalculated(byval Age As Integer Handles person1.agecalculated الكائن person1 لبد من إنشاءه باستخدام الكلمة المحجوزة WithEvents ومن ثم يمكن استخدام معالج الحدث.AgeCalculated 174
1.59 اختبار الفئات فيما سبق قمنا بإنشاء الفئة Person وأضفنا إليها الخصائص والطرق والحداث في هذا القسم سوف نتعلم كيف يمكننا إنشاء كائن مثال للفئة Person وذلك من أجل أختبار الفئة التي قمنا بتصميمها. 1.59.1 إنشاء كائن مثال على الفئة بالر غم من عد إدراك نا لهذه الحقي قة فإن نا ك نا نتعا مل مع فئات طوال التدريبات الس ابق فالنماذج وعناصر التحكم ما هي إل فئات في واقع ال مر وعند ما نقوم بس حب أي من عناصر التحكم ونرميه فوق النموذج فإننا نقوم بإنشاء مثال على فئته. يمكن نا أن ننش ئ مثال عن أي كائن عن طر يق التعليمات وذلك با ستخدام الكل مة المحجوزة.New فمثل I عوضا I عن سحب المفتاح Button ورم يه يمكن نا أن نس تخدم التعليمات التالية : Dim abutton As New Button وحتى يمكننا أن نختبر الفئة Person فإنه سيكون علينا إنشاء مشروع جديد ثم عمل إشارة مرجعية Reference للفئة Person ومن ثم نستطيع استخدامه في المشروع. ولذلك سوف نقوم بالجراءات التالية :.252 افتح المشروع.Person من القائمة File أنقر Ad ثم أنقر.New Project أختار.Window Application في الخا نة Name أع طي مشرو عك الجد يد أ سم هو PersonTest ثم أن قر المفتاح.Ok في النافذة Solution Explorer أختار المشروع.PersonTest من القائمة Project أنقر فوق.Set as StartUp Project من القائمة Project اختار.Add Reference تظهر نافذة Add Reference المبينة في شكل.9-76 175
في النافذة Add Reference أنقر فوق التبويب.Projects أختر Person ثم أنقر المفتاح.Ok أنقر مرتين فوق النموذج Form1 ليظهر محرر التعليمات. أضف التعليمات التالية عقب Public Class مباشرة. شكل :76-9 النافذة Add Reference Dim person1 As New Person.Person هذا الس طر يعلن عن مثال جد يد عن الفئة.Person وق بل أن تس ال لماذا ا ستخدمنا كل مة person مرت ين ب عد الكل مة المحجوزة New فالولى تم ثل Person.vn الوحدة النمطية للفئة بينما الثانية تمثل الفئة Person داخل هذه الوحدة النمطية. من القائمة File أختار.Sava All 176
1.59.2 اختبار الفئة في المرحلة الثان ية نقوم بإضا فة واج هة ا ستخدام User Interface وتعليمات تس تخدم الفئة.Person سوف نقوم بإضا فة صناديق نص وص ح تى يم كن للمس تخدم أن يخص ص ق يم لخص ائص الفئة طب عا الخص ائص ال تي ليس ت من النوع ReadOnly وصندوق تأشير لدخال خاصية Alive ومفاتيح لختبار الفئات..253 من النافذة Solution Explorer أنقر فوق النموذج Form1 ثم أختر.Designer.254 قم بس حب أرب عة صناديق نص وص TextBox و صندوق تأش ير CheckBox ومفتاحين Button وأرمهم فوق النموذج.Form1.255 أنقر فوق Button1 ثم أنتقل إلى نافذة الخصائص قم بضبط قيمة الخاصية Text لتصبح.Update.256 أنقر فوق Button2 ثم أنتقل إلى نافذة الخصائص قم بضبط قيمة الخاصية Text لتصبح.Full Name.257 ان قر مرت ين فوق المفتاح Update ثم أك تب في معالج الحدث Button1_Click التعليمات التالية : With person1.firstname = Textbox1.Text.MiddleName = Textbox2.Text.LastName = Textbox3.Text.BirthYear = Textbox4.Text.Alive = CheckBox1.Checked End With ل عل القارئ يل حظ أ نه عند ما يقوم بكتا بة التعليمات فإن الخا صية IntelliSense تتص رف مع الفئة Person كأن ها من الفئات المتعارف علي ها في Visual Basic.NET.2008 أن قر فوق المفتاح الثا ني وأك تب التعليمات التال ية في معالج الحدث :Button2_Click 177
' Test the FullName method. ) MsgBox(person1.FullName ' test the Age property and CalcAge method. )" MsgBox(CStr(person1.Age) & " years old ' Test the Alive property. If person1.alive = True Then )" MsgBox(person1.FirstName & " is alive Else )" MsgBox(person1.FirstName & " is no longer with us End If أنقر فوق المفتاح F5 لتنفيذ البرنامج. في الصندوق الول قم بكتابة أسمك الول. في الصندوق الثاني أكتب اسمك الوسط. في الصندوق الثالث أكتب أسم العائلة. في الصندوق الرابع اكتب عام ميلدك. أنقر فوق الصندوق التأشير. أنقر فوق المفتاح Update لتزويد الفئة بالخصائص. أنقر فوق المفتاح.Full Name تظ هر ثلثة ر سائل الولى عن السم الكامل والثانية عن العمر والثالثة عن الحالة الحياتية. من القائمة File أختر.Save All 1.59.3 اختبار التحميل الزائد للفئات.258 أضف مفتاحين جديدين للنموذج. 178
أض بط الخا صية text للمفتاح الول لتص بح With وللمفتاح الثا ني لتص بح.Without أن قر مرت ين فوق المفتاح With وأ ضف التعليمات التال ية للحدث :Button3_Click & " " & MsgBox(person1.FirstName ) person1.middleinitial(true) & " " & person1.lastname أن قر مرت ين فوق المفتاح Without وأ ضف التعليمات التال ية للحدث :Button4_Click MsgBox(person1.FirstName & " " & person1.middleinitial ) & " " & person1.lastname أنقر فوق المفتاح F5 لتنفيذ البرنامج. في الصندوق الول قم بكتابة أسمك الول. في الصندوق الثاني أكتب اسمك الوسط. في الصندوق الثالث أكتب أسم العائلة. في الصندوق الرابع اكتب عام ميلدك. أنقر فوق الصندوق التأشير. أنقر فوق المفتاح Update لتزويد الفئة بالخصائص. أنقر فوق المفتاح.With تظهر رسالة تحتوي على أسمك وعلمة بعد السم الوسط أنقر فوق المفتاح.Without تظهر رسالة تحتوي على أسمك وبدون علمة بعد السم الوسط من القائمة File أختر.Save All 1.59.4 اختبار عامل الحدث.259 أضف العبارة التالية قبل العلن عن المتغير ) person أي بعد.(Public Class 179
WithEvents person1 As New Persons.Persons أضف الجراء التالي إلى النموذج ) Private Sub person1_agecalculated(byval Age As Integer Handles person1.agecalculated If Age > 18 Then " & MsgBox("You have been over 18 for " & Age 18 )" years. Else )" MsgBox("You will be 18 in " & 18 - Age & " years End If End Sub أنقر فوق المفتاح F5 لتنفيذ البرنامج. في الصندوق الول قم بكتابة أسمك الول. في الصندوق الثاني أكتب اسمك الوسط. في الصندوق الثالث أكتب أسم العائلة. في الصندوق الرابع اكتب عام ميلدك. أنقر فوق الصندوق التأشير. أنقر فوق المفتاح Update لتزويد الفئة بالخصائص. أنقر فوق المفتاح.Full Name إذا كان عمرك تجاوز الثامنة عشر تظهر رسالة تعلمك أنك تجاوزت الثامنة عشر وتليها رسالة تبين بكم تزيد عن الثامنة عشر أما إذا كنت دون الثامنة عشر تظهر رسالة تبين الفارق بين سنك والثامنة عشر ثم تظهر رسالة تبين أنك دون الثامنة عشر. من القائمة File أختر.Save All 1.60 الوراثة Inheritance الوراثة تمثل خاصية مهمة في التعامل مع الفئات. وحتى نقربها من الذهن لنتخيل الس يارات كفئة تت فق جم يع الس يارات في الخص ائص والوظائف والحداث لذلك نن ظر ل ها 180
كفئة واحدة ل كن هناك ب عض الس يارات ال تي ل ها خص ائص فريدة كتلك الس يارات ال تي ل ها سقف قابل للطي هذه السيارات تتفق مع جميع السيارات الخرى في الخصائص والوظائف والحداث لكنها تزيد عنها في سقفها القابل للطي. إذا نظرنا إلى هذا الموقف من وجهة نظر الفئات فنحن لن نكون في حاجة أن ننشأ فئة جديدة بالكامل لتمثل مجموعة السيارات ذوات السقف القابل للطي بل سوف ننشأ فئة متفرعة عن الفئة الساسية للسيارات ترث عن الفئة الم جم يع الخص ائص والطرق والحداث المعر فة في هذه الفئة الم إضا فة إلى مجمو عة جديدة من الخص ائص والحداث والوظائف ال تي تم ثل تم يز هذه الفئة عن الفئة الم. يطلق على هذه المقاربة في البرمجة اسم الوراثة.Inheritance 1.60.1 الوراثة من فئة موجودة الكلمة المحجوزة Inherits تستخدم لعلن فئة جديدة يطلق عليها أسم الفئة المشتقة Derived Class ترث فئة موجودة يطلق علي ها ا سم الفئة ال ساسية.Base Class التعليمات التالية تبين كيف يمكن استخدام الكلمة المحجوزة :Inherits Class DerivedClass Inherits BaseClass End Class الفئة الجديدة DerivedClass يم كن إنشاء كائنات عن ها الح ين و سوف يكون لكائنات ها جم يع خص ائص ووظائف وأحداث الفئة.BaseClass لنضرب مثل I ح تى يمكن نا تصور الفكرة التي نناقشها. فلنتصور أننا نريد أن ننشأ فئة تمثل لعبي كرة القدم لكن لعبي كرة القدم ل هم كل الخص ائص والحداث والوظائف لفراد الفئة Person ال تي أنشأن ها من ق بل. لذلك فل دا عي لن نقوم بإنشاء فئة خا صة جديدة Players ل كن يمكن نا أن ننش أ هذه الفئة كفئة مشتقة أو منحدرة من الفئة.Person حتى نقوم بهذا العمل لنتبع الجراءات التالية :.260 أفتح المشروع.Person أنقر فوق المشروع Person في النافذة.Solution Explorer من القائمة Project أختار.Add Class في النافذة Add New Item أكتب Players في الخانة.Name 181
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام.Add انقر المفتاح. تظهر وحدة نمطية جديدة : في نافذة محرر التعليمات أضف التعليمات التالية Inherits Persons : أضف بعد هذه السطر التعليمات التالية التي تعرف خاصيتين جديدتين Private numbervalue As Integer Private positionvalue As String Public Property Number() As Integer Get Number = numbervalue End Get Set(ByVal value As Integer) numbervalue = value End Set End Property Public Property Position() As String Get Position = positionvalue End Get Set(ByVal value As String) positionvalue = value End Set End Property.Save All أختر File من القائمة اختبار الفئة المشتقة 1.60.2.New Project ومنها اختار Add أختر File من القائمة.261.Windows Application أختار Add New Project في النافذة.PlayerTest أكتب Name في الخانة 182
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام.Ok انقر يظهر نموذج جديد.Solution Explorer في نافذة PlayerTest أنقر فوق المشروع.Set as Stratup Projetc أختار Project من القائمة.Add Reference أختار Project من القائمة Persons وأختار Projects انقر فوق التبويب Add Reference في النافذة.Ok ثم أكتب التعليمات التالية تحت أنقر مرتين فوق النموذج لتفتح محرر التعليمات.Public Class Form1 Dim player1 As New Persons.Players Dim player2 As New Persons.Players. هذين السطرين يعلنان عن كائنين جديدين لتظ هر نافذة PlayerTest أن قر مرت ين فوق النموذج الموجود في المشروع. محرر التعليمات :Form1_Load أضف التعليمات التالية لعامل الحدث With player1.firstname = "Andrew".LastName = "Cencini".Number = 43.Position = "Shortstop" End With With player2.firstname = "Robert".LastName = "Lyon".Number = 11.Position = "Catcher" End With 183
أضف مفتاحين Button للنموذج. أختر المفتاح الول وقم بضبط الخاصية Text له لتصبح.At Bat أختر المفتاح الول وقم بضبط الخاصية Text له لتصبح.On Deck أنقر مرتين فوق المفتاح At Bat لتظهر نافذة محرر التعليمات. أضف التعليمات التالية للحدث :button1_click MsgBox(player1.Position & " " & player1.fullname & ", )" #" & CStr(player1.Number) & " is now at bat. ل حظ أن نا ا ستخدمنا الطري قة Full Name بالر غم أن ها لم ي تم أضافت ها إلى الفئة Player وذلك لن ها مورو ثة عن الفئة Person الفئة ال ساس ال تي انحدرت من ها الفئة.Players أضف للحدث Button2_Click التعليمات التالية : MsgBox(player2.Position & " " & player2.fullname & ", )" #" & CStr(player2.Number) & " is on deck. من القائمة File أختر.Save All أنقر المفتاح F5 لتنفيذ البرنامج ثم أختبر كل مفتاح على حده. 1.60.3 تجاوز العضاء Overriding Members سبق أن أشرنا على كلمة عضو Member تعني مكونات الفئة من خصائص وطرق وأحداث. في هذا القس م سنتعلم ك يف يم كن أن نتجاوز أ حد أعضاء الفئة ال ساس. ونع ني بالتجاوز تغيير عمل طريقة أو خاصية منحدرة عن الفئة الساس في الفئة المشتقة. فمثل I يمكن أن ننشئ فئة جديدة للشاحنات Trucks منحدرة من فئة السيارات Cars ول كن في الشاحنات تكون المحركات تع مل بالديزل لذا ف غن خص ائصها سوف تختلف عن تلك العاملة في السيارات العادية لذلك يلزم هنا تغيير الطريقة التي تصف عمل المحرك أو في عبارة أكثر مهنية تجاوز Override هذه الطريقة. افتراضيا I ل يم كن تجاوز الطرق والخص ائص المنحدرة عن الفئة ال ساس وح تى يتم كن ال مبرمج من تنف يذ تجاوز عن عض و ما في الفئة المشت قة ل بد أن يكون هذا العض و 184
قا بل للتجاوز Overridable في الفئة ال ساس وذلك بإعل نه كذلك بوا سطة الكل مة المحجوزة Overridable كما هو مبين في التعليمات التالية : Public Overridable Property EngineType As String Public Overridable Sub StartEngine(ByVal EngineType As ) String وعند إنشاء الفئة المشتقة فإن العضاء الذين أشير إليهم كأعضاء قابلة للتجاوز في الفئة ال ساس يم كن تعديل هم با ستخدام الكل مة المحجوزة Overrides ك ما هو مبين في التعليمات التالية : Public Overrides Property EngineType As String Public Overrides Sub StartEngine(ByVal EngineType As ) String سوف نقوم في التدر يب التالي باختبار هذه المفاه يم عن طر يق تعد يل الطري قة FullName لتقوم بإرجاع السم بدون السم الوسط ومضافا I إليه رقم اللعب. لنقوم بهذا لنتبع الجراءات التالية :.262 في النافذة Solution Explorer أخ تر person.vb ثم أخ تر Code من القائ مة.View في نافذة محرر التعليمات قم بتعديل تعريف الطريقة FullName كما يلي : Public Overridable Function FullName() As String.263 في النافذة Solution Explorer أخ تر Player.vb ثم أخ تر Code من القائ مة.View.264 أضف التعليمات التالية إلى تعليمات هذه الفئة : Public Overrides Function FullName() As String & " FullName = FirstName & " " & LastName & ", # numbervalue End Function.265 في النافذة Solution Explorer أخ تر PlayerTest ثم أخ تر Code من القائ مة.View 185
.266 في نافذة محرر التعليمات قم بتعد يل عا مل الحدث Button1_Click ليص بح ك ما يلي : MsgBox(player1.Position & " " & player1.fullname & " is )" now at bat..267 في نافذة محرر التعليمات قم بتعد يل عا مل الحدث Button2_Click ليص بح ك ما يلي : MsgBox(player2.Position & " " & player2.fullname & " is )" on deck. من القائمة File أختر.Save All أنقر المفتاح F5 لتنفيذ البرنامج ثم أختبر كل مفتاح على حده. 1.61 استخدام المجموعات في إدارة الكائنات المتعددة في قس م سابق من هذا الكتاب تعرضنا لستخدام المص فوفات لدارة مجموعات من المتغيرات. بن فس هذه الطري قة يمك نك ان ي تم إدارة مجمو عة من الكائنات با ستخدام المص فوفات ل كن Visual Basic.NET 2008 يعرض طري قة أخرى لدارة مجموعات الكائنات من خلل كائن مخصوص هو كائن "المجموعة "Collection والممكن استخدامه لختزان أو استرجاع مجموعة كائنات في آن واحد. وكما في المصفوفات فإن كل عنصر في المجموعة له دليل Index يمكن الوصول إلى هذا العنصر / الكائن من خلله. إضافة على ذلك فعن كل عنصر في المجموعة له مفتاح Key و هو عبارة عن قي مة حرف ية يم كن أن تس تخدم لتعي ين هذا العنص ر. ميزة ا ستخدام المفتاح أن المبرمج ل يحتاج أن يستخدم الدليل Index للوصول إلى العنصر بل عوضا I عن ذلك يمكنه أن يستخدم أسم ذي معنى. 1.61.1 إنشاء المجموعة المجموعات تع تبر مه مة لل مبرمج الذي يس تخدم عدد كبير من المثلة الدالة على فئة معي نة فعل سبيل المثال بالنس بة للفئة Players يحتاج ال مبرمج على عدد قد ي بغ عشر ين مثال على هذه الفئة ع ند ع مل برنا مج يش ير إلى فر يق كرة قدم. ل حل م ثل هذه المس الة يل جأ 186
ال مبرمج إلى ا ستخدام المجموعات وأول خطوة ح تى يقوم با ستخدام المجموعات هي إنشاء مجموعة جديدة ولداء هذا المهمة يحتاج إلى تعليمات مثل التالية : Dim baseballteam As New Collection بمجرد إنشاء المجمو عة يم كن لل مبرمج أن يقوم با ستخدام الطري قة Add لضا فة كائن إلى المجموعة والطريقة Remove لحذف كائن من هذه المجموعة. عند إضافة كائن إلى المجمو عة با ستخدام الطري قة Add يحتاج ال مبرمج إلى تخص يص الكائن الذي سوف يضاف إلى المجمو عة ويقوم بتحد يد القي مة الحرف ية المس تخدمة كمفتاح ك ما هو مبين في التعليمات التالية : )" baseballteam.add(playerobject, "Player's Name أ ما ع ند حذف الكائن من المجمو عة فعلى ال مبرمج أن يس تخدم المفتاح لتعي ين الكائن المطلوب حذفه من المجموعة كما هو مبين في التعليمات التالية : )" baseballteam.remove("player's Name في التدر يب التالي سوف نقوم بإضا فة كائن ين من الفئة Players ثم نقوم بإنشاء مجموعة ونضيف إليها اللعبين وسوف نستخدم موقع Position اللعب في الفريق بمثابة المفتاح الخاص بالكائن في المجموعة..268 افتح المشروع السابق من النافذة Solution Explorer أختار المشروع PlayerTest ثم أختار النموذج Form1.vb ثم أنقر فوق مفتاح.Code أضف التعليمات التالية بعد العلن عن لكائن.player2 Dim player3 As New Persons.Players Dim player4 As New Persons.Players Dim team As New Collection أضف التعليمات التالية للحدث :Form1_Load With player3 ".FirstName = "Eduardo ".LastName = "Saavedra.Number = 52 187
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام.Position = "First Base" End With With player4.firstname = "Karl".LastName = "Jablonski".Number = 22.Position = "Pitcher" End With team.add(player1, player1.position) team.add(player2, player2.position) team.add(player3, player3.position) team.add(player4, player4.position) ثم أختار PlayerTest أختار Solution Explorer من النافذة.Designer وانقر فوق Form1.vb.ComboBox عنصر تحكم من النوع Form1 أضف إلى النموذج... ثم انقر فوق Items اختار الخاصية Properties في النافذة أكتب القيم التالية في المحرر الذي سوف يظهر Keeper Left Wing Right Wing Attacker ثم لتف تح محرر التعليمات الخاص به ComboBox أن قر مرت ين فوق ال ـ :ComboBox1_SelectedIndexChanged أضف التعليمات التالية للحدث Dim SelectedPlayer As Persons.Players SelectedPlayer = team(combobox1.selecteditem) MsgBox("Playing " & ComboBox1.SelectedItem & " is " & SelectedPlayer.FullName & "!") 188
أنقر F5 لتنفيذ البرنامج. أختر من الـ ComboBox موقع اللعب تعرض بيانات اللعب الذي يحتل هذا الموقع في رسالة. 1.61.2 الحلقة For Each Next في التدر يب الس ابق قم نا بإضا فة ق يم ال ـ Position يدويا I في عنص ر التح كم.ComboBox هذه الطري قة قد تبدو سهلة ل كن ع ند التعا مل مع المجموعات ال تي تم ثل كائنات حقيقية تصبح هذه الطريقة مستحيلة وغير عملية بالمرة. لكن الطريقة المثلى للتعامل مع إضافة الكائنات في المجموعات هي استخدام حلقة مخصصة لذلك هي حلقة For Each.Next التعليمات التالية تستخدم هذه الحلقة لداء مهمة إضافة الكائنات إلى مجموعة : Dim player As Persons.Players For Each player In team ) ComboBox1.Items.Add(player.Position Next في هذه التعليمات يلعب الكائن player دور العداد في حلقة For Next التقليدية فتكون التعليمات تقول لكل كائن player في المجموعة team نفذ عملية إضافة. 189
أسس برمجة عناصر التحكم في القسم السابق تناولنا كيف يمكن برمجة الفئات ثم مجها في أكثر من تطبيق وهو ما يقلل المجهود والو قت اللزم لعمل ية تطو ير الت طبيق. عنا صر التح كم هي في وقاع الحال مجرد فئات يم كن إعادة ا ستخدامها في العد يد من المشروعات. في كث ير من الحوال ي جد المس تخدم نفس ه يحتاج أن يقوم بتص ميم ذات واج هة ال ستخدام في أك ثر من مشروع كأن يستخدم عنصر تحكم من الفئة TextBox لتلقي السم الول وآخر من نفس الفئة لتلقى اسم العائلة ثم يقوم بد مج هذ ين ال سمين للحص ول على ال سم الكا مل. في م ثل هذه الحالة يكون من الفضل لو أن هناك عنصر تحكم يستطيع المبرمج إعادة استخدامه في تطبيقاته دون أن يعيد كتابته كل مرة. من هذا المد خل نقدم مفهوم برم جة عنا صر التح كم ح يث يم كن الن ظر إلى عنا صر التح كم كأن ها فئات تقوم بإنشاء كائنات مرئ ية. مع ظم عنا صر التح كم ال تي يقوم بتطوير ها ال مبرمجين في وا قع ال مر عبارة عن د مج لعدد من عنا صر التح كم القيا سية المتوفرة في.Visual Basic.NET 2008 في هذا القس م سوف نتعرف على ال ساليب والدوات اللز مة لنشاء عنا صر تح كم خاصة بنا عن طريق دمج عدد من العناصر القياسية. 1.62 استخدام User Control Designer في هذا القسم سوف نتعلم كيف يمكننا أن ننشأ عناصر التحكم خاصتنا باستخدام الداة.User Control Designer في القس م ٩ تعلم نا ان ننش ئ فئة با ستخدام قالب المشروع Class Library عنص ر التح كم هو عبارة عن فئة يم كن أن نر ها وك ما عنا صر التح كم القياسية المتوفرة في Visual Basic.NET 2008 فإن عناصر التحكم التي يقوم المبرمج بتصميمها يمكن أن يضيفها إلى النماذج أثناء التصميم لتظهر عند تنفيذ البرنامج. عندما تقوم بتصميم واجهة تطبيقك فإن النموذج هو المكان الذي سوف تقوم بتجميع عنا صر تحك مك فو قه وتقرر ك يف سوف تبدو هذه العنا صر. وبالم ثل فإن الداة User Control Designer تساعدك على تصميم عنصر التحكم خاصتك وكيف يبدو. 190
عنص ر التح كم كأي فئة أخرى ل كن يم كن أضاف ته إلى صندوق الدوات Toolbox ويم كن وض عه فوق النموذج. وعلى ح ين أن الوحدة النمط ية للفئة Class Module تحتوي ف قط على تعليمات فإن عنص ر التح كم يحتوي على تعليمات وش كل. الداة User Control Designer تما ثل النموذج المس تخدم في تص ميم الواجهات ح يث له خص ائص للتح كم في شكل وسلوك عناصر التحكم التي يحتويها. تختلف الطري قة ال تي يم كن أن تس تخدم إنشاء عنص ر التح كم تبعا I ل صداره Visual basic المس تخدمة ف ـ Visual Basic 2008 يحتوي على مشروع هو Windows Control Library لكن في Visual Basic Express لبد من أنشاء مشروع Class Library في البداية ثم إضافة قالب.User Control 1.62.1 إنشاء عنصر التحكم في Visual Basic Express لنشاء عنصر تحكم في Visual basic Express نتبع الخطوات التالية :.269 من القائمة File اختر.New Project من التبويب Template اختر Class Library ثم أنقر المفتاح.Ok من القائمة Project أختار.Add User Control في النافذة Add New Item اختر.User Control في الخانة Name اكتب NamesControl ثم أنقر.Add يتم إضافة عنصر تحكم User Control جديد إلى المشروع ويتم فتح نافذة User.Control Designer من النافذة Solution Explorer انقر بمفتاح الفأرة اليمن فوق Class1.vb ثم أنقر Delete وانقر.Ok من النافذة File اختر.Save All في النافذة Save project اك تب ا سم المشروع NamesUserControl ثم أنقر.Save 191
1.62.2 إنشاء عنصر التحكم في Visual Basic 2008 لنشاء عنصر تحكم في Visual basic 2008 نتبع الخطوات التالية :.270 من القائمة File أختر.New project من التبويب Templates اختار.Windows Control Library في الخانة Name أكتب NamesControl ثم أنقر.Ok يضاف قالب User Control إلى المشروع وتنف تح النافذة User control.designer من النافذة File اختر.Save All في النافذة Save project اك تب ا سم المشروع NamesUserControl ثم أنقر.Save 1.63 إضافة عناصر التحكم القياسية على عنصر التحكم المصمم ك ما سبق أن ذكر نا فإن أش هر انواع عنا صر التح كم المخل قة هي تلك المدم جة من عناصر تحكم قياسية. يمكن أضافة عناصر التحكم القياسية إلى قالب User Control بجرها من صندوق الدوات ثم رميها فوق القالب. وبمجرد وضع عناصر التحكم القياسية فوق القالب يمكن التحكم في حجمها ووضعها من خلل النافذة.Properties في التدريب التالي سوف نقوم بإضا فة عنص ر تح كم Label لعرض ال سم الكا مل وثل ثة عنا صر تح كم من النوع Textbox لدخال السم الول والوسط واسم العائلة. حتى نقوم بهذا سوف نتبع الخطوات التالية :.271 أفتح المشروع.NamesUserControl في النافذة Solution Explorer اختار NamesControl.vb ثم من القائمة View اختار.Designer قم بس حب عنص ر تح كم Label من صندوق الدوات وار مه فوق قالب التصميم. 192
في النافذة Properties قم بتغيير الخاصية Name لتصبح.FullName من صندوق الدوات ا سحب ثل ثة عنا صر تح كم من النوع TextBox وارمهم فوق قالب التصميم. من النافذة Properties قم بتغي ير ال سماء لتص بح FirstName و MiddleName و.LastName من القائمة File أختار.Save All 1.64 إضافة التعليمات إلى عنصر التحكم المنشأ في هذا القسم نتعلم كيف نضيف التعليمات لعنصر التحكم لعرض السم بالكامل. كما عناصر التحكم القياسية لعناصر التحكم المنشأة خصائص وطرق وأحداث. ويمكن للمبرمج أن يقوم بكتابة التعليمات التي سوف يتم تنفيذها عن الستجابة للحداث وما هي الخصائص التي يمكن مستخدم عنصر تحكمك أن يتعامل معها. 1.64.1 الحداث الخاصة بعنصر التحكم المنشأ ح تى يكون عنص ر التح كم الذي ق مت بتص ميمه ذي منف عة ي جب أن تض يف له تعليمات للتعا مل مع أحدا ثه. ول تختلف كتا بة تعليمات معاملت الحدث لعنص ر التح كم عن مثيلتها في واجهات التطبيقات التي قمنا بإنشائها في أقسام سابقة من هذا الكتاب. في المثال التالي سوف تقوم بإضا فة تعليمات تقوم بتحد يث قي مة الخا صية Text لعنصر التحكم FullName لتضم القيم النصية المدرجة في عناصر التحكم FirstName و MiddleName و LastName بمجرد إدخال هذه القي مة وذلك من خلل عا مل الحدث.TextChanged.272 أفتح المشروع.NamesUserControl في النافذة Solution Explorer اختار NamesControl.vb ثم من القائمة View اختار.Code في محرر التعليمات أ ضف التعليمات التال ية للحدث.FirstName_TextChanged 193
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام Private Sub FirstName_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles FirstName.TextChanged, MiddleName.TextChanged, LastName.TextChanged ' Display the contents of the three text boxes in the label. FullName.Text = FirstName.Text & " " & MiddleName.Text & " " & LastName.Text End Sub.Save All اختار File من القائمة User Control Test تظ هر النافذة. لختبار البرنا مج F5 أضرب المفتاح.Preview قم باختبار العنصر في النافذة.10-77 المبينة في شكل Container 194
شكل :77-10 النافذة User Control Test Container أنقر فوق المفتاح Close لنهاء اختبار عنصر التحكم. 1.64.2 خصائص عنصر التحكم الخصائص بالنسبة لعناصر التحكم القياسية تسمح للمبرمج أن يقوم بضبط والتعرف على قيم محددة حول عنصر التحكم في أثناء تصميم وتشغيل التطبيق. وبالمثل يرغب مصمم عنص ر التح كم في أن يكون لعنص ر تحك مه خص ائص يم كن للمطور ين الذ ين سوف يس تخدمون هذا العنص ر أن يتحكموا في ها وتظ هر في نافذة Properties كأي عنص ر تحكم قياسي. 195
تصميم الخصائص لعناصر التحكم يشبه إلى حد كبير تصميم خصائص الفئات لكنه يختلف ع نه في إ نه يمك نك أن ا ستخدام خص ائص عنا صر التح كم ال تي يتكون من ها عنص ر تحكمك. كما في الفئات يمكنك أن تعلن عن الخصائص ثم تضيف التعليمات للجراءات Get و.Set كما هو واضح الن ليس هناك ثمة طريقة لسترجاع القيم التي أدخلت إلى عناصر التح كم FirstName و MiddleName و LastName ول تلك ال تي ظهرت في FullName حيث يجب على المبرمج أن يصمم خصائص تتيح لمستخدمي عنصر التحكم خاصته أن يتعاملوا مع هذه القيم بالتخصيص أو بالسترجاع. لتصميم خصائص عنصر التحكم الذي ننشئه سوف نقوم بإجراء الخطوات التالية :.273 أفتح المشروع.NamesUserControl في النافذة Solution Explorer اختار NamesControl.vb ثم من القائمة View اختار.Code في محرر التعليمات أضف التعليمات التالية عقب Public Class مباشرة. Property FirstNameText() As String Get Return FirstName.Text End Get ) Set(ByVal value As String FirstName.Text = value End Set End Property Property MiddleNameText() As String Get Return MiddleName.Text End Get ) Set(ByVal value As String MiddleName.Text = value End Set End Property 196
Property LastNameText() As String Get Return LastName.Text End Get ) Set(ByVal value As String LastName.Text = value End Set End Property من القائمة File أختر.Save All أضرب المفتاح F5 لتشغيل البرنامج. انتقل إلى أسفل النافذة Properties في النافذة User Control Test Container لتجد الخصائص الثلثة اكتب في القيمة FirstNameText لت جد هذه القي مة تتغ ير في عنص ر التح كم وبالتالي في عنص ر التحكم.FullName شكل :78-10 الخصائص الجديدة تظهر في نهاية نافذة.Properties 1.64.3 القيم المسماة كل الخصائص التي أضفناها إلى عنصر التحكم الذي أنشأنه حتى الن تعتد على قيم نصية لكن الخصائص يمكن ان تتعامل مع أنواع بيانات مختلفة. احيانا يقوم المبرمج بعمل قائمة من القيم لختيار منها مثل الخاصية SizeMode لعنصر التحكم.PictureBox 197
لنفترض أننا نريد عمل خاصية تتيح لنا أن نتحكم في الهيئة التي سوف يبدو عليها ال نص المعروض في عنص ر التح كم.FullName في هذه الحالة يمكن نا أن نض يف قائ مة لهذه الخاصية تضم First Name First و Last Name First و هكذا. تسمح Visual Basic أن نستخدم الخاصية enumeration الذي يضم القيم التي تريد ها. الخا صية enumeration هي عبارة عن قائ مة رقم ية ويخص ص ال مبرمج مس مى لكل قيمة رقمية فيها ويقوم بإعلن هذه الخاصية مستخدما الكلمة المحجوزة Enum كما في المثال التالي : Public Enum Display FirstMiddleLast FirstLast LastFirstMiddle LastFirst End Enum وبمجرد عمل الـ enumeration يمكن استخدامه كأي من أنواع البيانات المعتادة. ولضافة الخاصية التي تعرض قائمة القيم يجب أن تقوم في البداية متغير من ذات الفئة كـ Enum ثم تعلن الخاصية من ذات النوع. أثناء تصميم التطبيق تظهر قائمة القيم في نافذة.Properties لنقوم بتجربة هذه الخاصية مع عنصر التحكم الذي قمنا بإنشائه..274 أفتح المشروع.NamesUserControl في النافذة Solution Explorer اختار NamesControl.vb ثم من القائمة View اختار.Code في محرر التعليمات أضف التعليمات التالية عقب الخصائص. Public Enum Display FirstMiddleLast FirstLast LastFirstMiddle LastFirst End Enum 198
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام. أضف التعليمات التالية لضافة خاصية جديدة Private DisplayStyleList As Display Property DisplayStyle() As Display Get Return DisplayStyleList End Get Set(ByVal value As Display) DisplayStyleList = value End Set End Property FirstName_TextChanged في الحدث أحذف التعليمات الموجودة : واستبدلها بما يلي Select Case DisplayStyleList Case Display.FirstLast FullName.Text = FirstName.Text & " " & LastName.Text Case Display.FirstMiddleLast FullName.Text = FirstName.Text & " " & MiddleName.Text & " " & LastName.Text Case Display.LastFirst FullName.Text = LastName.Text & ", " & FirstName.Text Case Display.LastFirstMiddle FullName.Text = LastName.Text & ", " & FirstName.Text & " " & MiddleName.Text End Select.Save All أختر File من القائمة وقم Properties أنتقل إلى نهاية النافذة. لتشغيل البرنامج F5 أضرب المفتاح أكثر من مرة وفي كل مرة جرب إدخال القيم الثلثة DisplayStyle بتغيير الخاصية. للسم 199
1.65 اختبار عنصر التحكم بمجرد النتهاء من تص مي عنص ر التح كم واختباره في النافذة User Control Test Container يمكنك بل ينصح بذلك أن تقوم باختباره في تطبيق مبسط يمكنك أن تف عل ذلك ببس اطة عن طر يق إضا فة مشروع Windows Application لمشرو عك ال ساسي. وعندئذ يظ هر عنص ر التح كم الذي ق مت بإنشائه آل يا في صندوق الدوات بح يث يمكنك سحبه ورميه على نموذج مشروعك. لنقوم بهذا سوف نتبع الجراءات التالية :.275 أفتح المشروع.NamesUserControl.276 من النافذة File اختر Add ومنها.New Project.277 من النافذة Add New Project أختار.Windows Application.278 في الخانة Name أكتب اسم المشروع UserControlTest ثم أنقر.Ok يظهر مشروع جديد في النافذة.Solution Explorer.279 من النافذة Solution Explorer اختار المشروع UserControlTest ثم من القائمة Project اختار.Set as StartUp Project.280 من صندوق الدوات قم بس حب عنص ر لتح كم NamesControl وارم يه فوق النموذج..281 قم بضبط الخصائص FirstName و MiddleName و LastName في النافذة.Properties.282 من القائمة File أختار.Save All.283 أضرب المفتاح F5 في لوحة المفاتيح لختبار البرنامج. 1.66 تحسين عنصر التحكم المنشئ في ما سبق قم نا بإضا فة عنص ر التح كم الذي قم نا بإنشائه على مشروع واخ تبرناه وتأكدنا من انه يعمل كما يجب. هناك بعض التحسينات التي ربما تكون قد شعرت انه يجب 200
أضافتها على عنصر التحكم الذي قمنا بإنشائه فمثل ربما تحتاج أن تتأكد أن السماء الثلثة قد تم تخصيصهم. وحتى يكون عنصر التحكم مفهوم ربما نضيف مسميات لكل TextBox لكن ماذا إذا رغب المبرمج في أن يستبدل السم الوسط بحرف فقط. ربما يون المثل في هذه الحالة هو ان نقوم بعمل خاصية يمكن التحكم فيها أثناء التصميم. 1.66.1 تحسين مظهر عنصر التحكم سوف نتبع الجراءات التالية لتحسين مظهر عنصر التحكم الذي قمنا بإنشائه..284 أفتح المشروع.NamesUserControl في النافذة Solution Explorer اختار NamesControl.vb ثم من القائمة View اختار.Designer قم بس حب عنص ر تح كم Label من صندوق الدوات وارم يه فوق قالب التصميم امام عنصر التحكم FirstName وكرر هذا العمل لكل من عنصري التحكم MiddleName و.LastName في النافذة Solution Explorer اختار NamesControl.vb ثم من القائمة View اختار.Code أضف التعليمات التالية في نافذة المحرر لعمل خصائص لعناصر التحكم التي اضفناها : " Private text1 As String = "First Name Property Label1Text() As String Get Return text1 End Get ) Set(ByVal value As String text1 = value Label1.Text = text1 End Set 201
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام End Property Private text2 As String = "Middle Name" Property Label2Text() As String Get Return text2 End Get Set(ByVal value As String) text2 = value Label2.Text = text2 End Set End Property Private text3 As String = "Last Name" Property Label3Text() As String Get Return text3 End Get Set(ByVal value As String) text3 = value Label3.Text = text3 End Set End Property بين ما Private من النوع Labels ل حظ أن هذه التعليمات تعرف خص ائص ال ـ. العلن عن الخاصية يتضمن القيمة الفتراضية لها من قائ مة NamesControl Events اخ تر من نافذة محرر التعليمات و من قائ مة الحداث الموجودة فوق على اليم ين الكائنات الموجود على اليس ار فوق.Load اختار الحدث :NamesControl_Load أضف التعليمات التالية للحدث ' Initialize the three labels Me.Label1.Text = Label1Text Me.Label2.Text = Label2Text Me.Label3.Text = Label3Text 202
من القامة Build اختار.Build Solution من النافذة Solution Explorer اختار النموذج Form1 ثم من القائ مة View اختار.Designer حاول ان تقوم بتغيير الخصائص الخاصة بعنصر التحكم. من القائمة File اختار.Sava All 1.66.2 الحدث Validating من المفاهيم الهامة التي يجب أن نتعرض لها عند تصميم عنصر تحكم هو اختبار ما إذا كان القيم المدخلة له أو القيم التي تضبط خصائصه ملئمة لما عليه التصميم. معظم عناصر التحكم لها الحدث Validating والذي يعمل عندما ينتقل التحكم من عنصر التحكم إلى عنص ر تحكم آ خر. في هذا الحدث يم كن أن تض يف التعليمات التي سوف تخ تبر ما إذا كان كل textbox يحتوي على قيمة حرفية أم ل. فإذا كان أحد هذه العناصر فارغا I تخرج رسالة تنبه المستخدم ان هذه الصندوق فارغ. ويمكن أن يستمد نص هذه الرسالة من خاصية يقوم مستخدم العنصر بضبطها كيفما شاء. كما انه من الجائز أن مستخدم برنامجك ل يستخدم السم الوسط لذلك يمكننا إضافة خاصية من النوع الـ Boolean لتوقف عمل حدث التحقق على الـ.MiddleName لنقوم بهذا لنتبع الخطوات التالية :.285 في محرر التعليمات أضف تعليمات لخاصيتين سوف يتم التحقق منهما الولى لتبين ما إذا كان السم الوسط مطلوب أم ل. والثانية تبين الرسالة التي سوف يتم إرسالها. وذلك بإضافة التعليمات التالية : Private required As Boolean = True Property MiddleNameRequired() As Boolean Get Return required End Get ) Set(ByVal value As Boolean required = value End Set End Property 203
وسام الدين ممد Visual Basic.NET 2008 البمة باستخدام Private errormessage As String = "Please enter your name." Property ValidationErrorMessage() As String Get Return errormessage End Get Set(ByVal value As String) errormessage = value End Set End Property من قائ مة الكائنات namescontrol Events اختار في محرر التعليمات. من قائمة الحداث Validating والحدث :NamesControl_Validating اصف التعليمات التالية للحدث If MiddleNameRequired = True Then If FirstName.Text = "" Or MiddleName.Text = "" Or _ LastName.Text = "" Then MsgBox(ValidationErrorMessage) End If Else ' Middle name isn't required. If FirstName.Text = "" Or LastName.Text = "" Then MsgBox(ValidationErrorMessage) End If End If.Build Solution اختار Build من القائمة ثم من القائ مة Form1 اختار النموذج Solution Explorer من النافذة. حاول ان تقوم بتغيير الخصائص الخاصة بعنصر التحكم.Designer اختار View من صندوق الدوات وارميه فوق النموذج Button قم بسحب عنصر تحكم.Form1.Sava All اختار File من القائمة 204
اضرب المفتاح F5 ثم قم باختبار البرنامج. 205
برمجة الرسوم تو فر Visual Basic.NET 2008 مجمو عة من الدوات ال تي تس اعد ال مبرمج على أداء الوظائف المتعلقة بالرسوم. هذه الدوات هي موضوع هذا القسم. 1.67 أظهار الرسوم في قس م سابق تعل مت ا ستخدام عنص ر التح كم PictureBox لظهار صورة فوق النموذج هذه الطريقة مفيدة فقد إذا كانت الصورة المطلوب عرضها متوفرة لكن في بعض الحيان يحتاج ال مبرمج أن يقوم بإضا فة ر سوم إلى نموذ جه لهداف أخرى غ ير عرض الصور كأن يضيف دائرة حمراء حول صندوق نصوص مهم مثل. لداء مثل هذه الوظائف فإن Visual Basic.NET 2008 توفر الفئة Graphics التي تتيح للمبرمج تنفيذ مختلف العمليات المتعلقة بالرسوم. 1.67.1 أسس الرسم ق بل البدء في التعا مل مع الر سوم من خلل Visual Basic.NET 2008 من الفض ل ان نتعرف على ب عض المفاه يم ال ساسية. تتكون شا شة الحا سوب من اللف من النقاط الصغيرة التي يطلق عليها السم بكسلت Pixels بتخصيص لون لكل بكسل من هذه البكسلت تظهر الشكال المختلفة فوق الشاشة. الن لنتخيل النموذج كلوحة رسم Canava سوف تقوم بالرسم فوقها كيفما شئت كما لو حة الر سم الحقيق ية. وك ما أن لو حة الر سم ل ها أبعاد تقاس بالبو صة أو بالس م كذلك فإن للنموذج أبعاد تقاس بالبكس ل. يس تخدم في تحد يد مو قع البكس ل فوق النموذج نظام إحدا ثي بسيط يلعب يمتد المحور السيني فيه من اليسار على اليمين بينما يمتد المحور الصادي من العلى على السفل. في هذا النظام الحداثي تعتبر نقطة الصل هي الركن العلوي اليس ر من الشاشة لذلك فإ نه إذا أردت ر سم نق طة تب عد عشرة بكس لت من اليس ار وعشرة بكس لت من أعلى فإنك تشير إلى إحداثها السيني والصادي بالقيمتين ١٠ و.١٠ 206
كذلك تستخدم البكسلت لتوضيح طول وعرض الرسومات فمثل لرسم مربع طول حرفه ١٠٠ بكسل بحيث يكون ركنه العلوي اليسر عند النطة ١٠ و ١٠ نحتاج أن نبين أن أبعاده هي ١٠ و ١٠ و ١٠٠ و ١٠٠ حيث ١٠ و ١٠ هي نقطة الركن العلوي اليسر ١٠٠ طوله ١٠٠ الثانية عرضه. عمل ية الر سم فوق النموذج يطلق علي ها ال سم painting النماذج وعنا صر التح كم ل ها حدث يطلق عل يه Paint والذي يحدث عند ما تحتاج هذه النماذج وعنا صر التح كم إلى إعادة ر سمها على سبيل المثال عند ما يعرض نموذج للمرة الولى أو يخت في خلف نفاذة أخرى فإن أي تعليمات ق مت بكتابت ها لعرض ر سوم فوق هذا النموذج أو عنص ر التح كم ي تم اختزانها في الحدث.Paint 1.67.2 رسم خط لرسم خط عبر النموذج فإن هناك شيئين سيكون عليك تعريفهما إحداثياته ولونه. وك ما بينا سلفا I فإن الحداثيات يتم تعيين ها باستخدام البكس لت. بالنسبة لل خط هناك زوج من الحداثيات التي تحتاجها إحداثيات نقطة البداية وإحداثيات نقطة النهاية. وك ما أ نك تحتاج إلى قلم عند ما ر سم خط فوق لو حة الر سم كذلك فإ نك تحتاج إلى مثل هذا الكائن عند رسم الخط فوق النموذج. ويطلق على مثل هذا الكائن لحسمن الحظ السم.Pen الكائن Pen يعين الهيئة ال تي سوف يظ هر بها ال خط وفي مع ظم الحالت تكوه هذه الهيئة قا صرة على لون ال خط. في التدر يب التالي سوف نقوم بر سم خطوط أفق ية ورأ سية وعرضية فوق النموذج باستخدام تعليمات.Visual Basic.NET 2008.286 أختار New Project من القائمة.File من التبويب Templates اختار.Windows Application في الخانة Name أجعل اسم المشروع Lines ثم أنقر المفتاح.Ok أن قر مرتين فوق النموذج لتظهر نافذة تحرير التعليمات أختار الحدث Paint من قائمة الحداث. أضف التعليمات التالية للحدث :Form1_Paint 207
' Draw a 400 pixel black line 25 pixels from the top of the form. ) e.graphics.drawline(pens.black, 0, 25, 400, 25 ' Draw a 500 pixel red line 100 pixels from the left of the form. ) e.graphics.drawline(pens.red, 100, 0, 100, 500 ' Draw a diagonal blue line from the upper left to the lower right. e.graphics.drawline(pens.blue, 0, 0, Me.Width, ) Me.Height أنقر المفتاح F5 لتنفيذ البرنامج. 1.68 رسم الشكال فيما سبق تعرفنا كيف نرسم خط بسيط فوق النموذج باستخدام الطريقة DrawLine و كائن Pen إضافة إلى رسم الخطوط يمكن استخدام Visual Basic.NET 2008 لرسم الشكال سواء كانت الفارغة أو المصمتة لكن عند رسم الشكال المصمتة نحتاج إلى كائن جديد شبيه بالكائن Pen هو الكائن.Brush 1.68.1 رسم الشكال البسيطة رسم الشكال يتشابه مع رسم الخطوط حيث تكون مضطر لتعيين إحداثيات أشكالك وهيئت ها. وعلى ح ين يحتاج ر سم ال خط تحد يد إحداثيات نقطت ين فحس ب فإن الشكال م ثل المر بع أو المس تطيل تحتاج إحداثيات تبين الر كن العلوي اليس ر من ها إضا فة إلى طول ها وعرضها. الدائرة والشكل البيضاوي ل تحتاج في رسمها الركن العلى اليسر منها حيث ل يو جد ل ها م ثل هذه النق طة ل كن عوضا I عن هذا يس تخدم لتحديد ها الر كن العلوي اليس ر للمستطيل الوهمي المحيط بها. فيما يلي تدريب على رسم شكل بسيط فوق النموذج..287 أختار New Project من القائمة.File من التبويب Templates اختار.Windows Application في الخانة Name أجعل اسم المشروع Shapes ثم أنقر المفتاح.Ok 208
أن قر مرتين فوق النموذج لتظهر نافذة تحرير التعليمات أختار الحدث Paint من قائمة الحداث. أضف التعليمات التالية للحدث :Form1_Paint ' Draw a 200 by 150 pixel green rectangle. ) e.graphics.drawrectangle(pens.green, 10, 10, 200, 150 ' Draw a blue square ) e.graphics.drawrectangle(pens.blue, 30, 30, 150, 150 ' Draw a 150 pixel diameter red circle. ) e.graphics.drawellipse(pens.red, 0, 0, 150, 150 ' Draw a 250 by 125 pixel yellow oval. ) e.graphics.drawellipse(pens.yellow, 20, 20, 250, 125 أنقر المفتاح F5 لتنفيذ البرنامج. 1.68.2 رسم الشكال المصمتة الشكال ال تي قم نا بر سمها في التدر يب الس ابق كا نت تعت مد على ال خط الخار جي Outline ف قط لر سم أشكال مص متة يحتاج ال مبرمج ا ستخدام طرق تعبئة اللون م ثل FillRectangle و.FillEllipse هذه الطرق تستخدم الكائن Brush وهو كائن رسومي آخر. عندما تقوم بتعبئة الشكل بلون مختلف ستكون محتاج إحداثيات مثل التي استخدمتها لر سم الش كل وإل سوف ت جد ال خط الخار جي قد اخت فى تن حت اللون الجد يد. فمثل I لتعبئة المر بع ذي الحداثيات 0,0,150,150 ي جب تعي ين إحداثيات التعبئة لتكون 1,1,148,148 وذلك على أساس أن سمك الخط الخارجي بكسل واحد. لنجرب ذلك اتبع الخطوات التالية :.288 أضف التعليمات التالية للحدث :Form1_Paint ' Fill the circle with the same color as its border. ) e.graphics.fillellipse(brushes.red, 0, 0, 150, 150 ' Fill the square with a different color. e.graphics.fillrectangle(brushes.aquamarine, 31, 31, ) 148, 148 209
أنقر المفتاح F5 لتنفيذ البرنامج. 1.69 رسم النصوص فوق النموذج سوف نتعلم في ما يلي ك يف نقوم بر سم النص وص فوق النموذج مس تخدمين طرق الرسوم.Graphics Methods في أقسام سابقة تعلمنا كيف نقوم باستخدام عنصر التحكم Label لعرض النصوص. لكن هناك حالت يحتاج فيها المبرمج أن يضيف النصوص فيها إلى برنام جه كر سوم فمثل يم كن أن نقدم ال خط مائل با ستخدام عنص ر التح كم Label ل كن بتقديمه كرسوم نستطيع أن نميل النص إلى أي اتجاه كيفما شئنا. 1.69.1 رسم النص لر سم ال نص فوق النموذج سوف نس تخدم الطري قة.DrawString وك ما في طرق الر سم الخرى تعت مد الطري قة DrawString على كائن Brush لتحد يد لون وإحداثيات النص المرسوم. وتمثل نقطة الركن العلوي اليسر هي نقطة ركن المستطيل المحيط بالنص. تحتاج الطري قة DrawString أيضا I إلى قيمت ين أخري ين قي مة ال نص المطلوب ر سمه ونوع ال خط المس تخدم لر سم ال نص. ولتمث يل ال خط ل بد من إنشاء كائن Font ثم استخدام هذا الكائن في الطريقة.DrawString سوف نتبع الخطوات التالية لختبار طريقة رسم النص..289 أختار New Project من القائمة.File من التبويب Templates اختار.Windows Application في الخانة Name أجعل اسم المشروع DrawText ثم أنقر المفتاح.Ok أن قر مرتين فوق النموذج لتظهر نافذة تحرير التعليمات أختار الحدث Paint من قائمة الحداث. أضف التعليمات التالية للحدث :Form1_Paint ' Create a font object. Dim afont As New System.Drawing.Font("Arial", 22, ) FontStyle.Bold ' Display the text with the DrawString method. 210
e.graphics.drawstring("graphics are fun!", afont, ) Brushes.Black, 20, 10 أنقر المفتاح F5 لتنفيذ البرنامج. 1.69.2 المؤثرات على النصوص لر سم نص مائل أو مدور نحتاج طري قة أخرى هي الطري قة.transform هناك أنواع مختل فة من ال ـ transform المم كن ا ستخدامها للحص ول على مؤثرات مختل فة للنصوص لكننا سوف نقتصر على طريقة واحدة هي.RotateTransform هذه الطريقة تحتاج إلى بارمتر واحد يمثل الزاوية التي سوف يدروها النص. عملية التحو يل تؤ ثر على الس طر التالي للس طر الذي يحتوي على تعليمات ال ـ.Transform هذه الطريقة يمكن أن تنسحب أيضا I على الشكال والخطوط. لنجرب هذا سوف نتبع الخطوات التالية :.290 أضف التعليمات التالية للحدث :Form1_Paint ' Fill the circle with the same color as its border. Dim afont As New System.Drawing.Font("Arial", 22, ) FontStyle.Bold ) e.graphics.fillellipse(brushes.red, 0, 0, 150, 150 ' Fill the square with a different color. e.graphics.fillrectangle(brushes.aquamarine, 31, 31, ) 148, 148 أنقر المفتاح F5 لتنفيذ البرنامج. 1.70 رسم الصور في ما يلي نتعلم ك يف يمكن نا أن نقوم بإضا فة صور با ستخدام طرق الفئة.graphics في قس م مب كر قم نا بعرض الص ور مس تخدمين عنص ر التح كم.PictureBox تت يح الفئة graphics للمبرمج قراءة صورة من ملف. لنقوم بهذا سوف نتبع الخطوات التالية :.291 أختار New Project من القائمة.File من التبويب Templates اختار.Windows Application 211
في الخانة Name أجعل اسم المشروع DrawImage ثم أنقر المفتاح.Ok في النافذة Solution Explorer ن قر مس تخدما مفتاح الفارة الي من فوق المشروع DrawImage واختار.Properties أختار التبويب.Resources أنقر فوق السهم المجاور لت Add Resources واختار من القائمة المنسدلة Add Existing File أنظر شكل.11-79 استخدم نافذة اختيار الملفات لتختار ملف صورة. شكل :79-11 أختار Add existing File أن قر مرتين فوق النموذج لتظهر نافذة تحرير التعليمات أختار الحدث Paint من قائمة الحداث. أضف التعليمات التالية للحدث :Form1_Paint ) e.graphics.rotatetransform(15 ) e.graphics.drawimage(my.resources.picture, 150, 50 استبدل picture باسم الصورة التي استخدمتها. أنقر المفتاح F5 لتنفيذ البرنامج. 212
شكل :80-11 الصورة كما ظهرت التطبيق 213