الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دروس في البرمجه بلغة C#2005, تعلم خطوة بخطوة , مع الإجابة عن أي سؤال

مغلقرائج
بدأه حماة النهضة في 19 أبريل 2007 · 208 رد · 80,594 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

النتيجـــة :// صنع برنامج مشغل صوتيات شبيه بالريال بلاير و الجت أوديو .

الهــــدف :// إخواننا الكرام في منتدى الفريق العربي للبرمجة .

الطريقة :// دروس برمجة مشروحة و معروضة على شكل صور موضح عليها كل شيء .

ما يميزنا عن الجميـــع ://

1- أننا نجيب على كل الأسئلة بإذن الله .

2- أننا سنواصل معكم حتى النهاية ..... ولو بقي معنا شخص واحد فقط.

أمثلــــــــة لنتائج من طبقوا تلك الدروس

من نحن ؟

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

و في هذا الدرس نسعى جاهدين لإفادتكم ...... فأنتم إخواننا ^_^ .

يا إخوة ....... هذه الدروس مبتدئة ...... لكن بنفس الوقت هيا رائعة ..... و سنتابع بعدها دروسا ً أكبر و أضخم إن شاء الله

من رأى فينا خطأ ً ...... فلينصحنا .... فنحن بشر ........

لسنا الوحيدون .......... و لكننا نسعى للأفضل بإذن الله لخير الأمة و نهضتها

و إنه لأمل ٌ أمل ........ جهد ٌ و عمل

صناع الثقة و التغيير

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#2

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

بإختصار الموضوع عبارة عن مجموعة دروس مبسطة في لغة C# 2005 للمبتدئين

بهدف إنشاء هذا البرنامج لتشغيل الصوتيات والمرئيات :

image12-2.jpg

الدروس ستكون مقسمة إلى قسمين , قسم الدرس وقسم التطبيق

وفي كل درس نبدأ بشرح الفكرة أو المفهوم أو القاعدة

وفي قسم التطبيق نطبق اللي تعلمناه من الدرس على مشروع البرنامج

ونستمر بهذه الطريقة كل درس إلى أن ننجز المشروع

لكن قبل البداية يجب تجهيز برنامجين للعمل على اللغة

البرنامج الأول من ميكروسوف وهو برنامج ملفات لغة البرمجة .NET Framework

للتحميل من هنا

حجم الملف يقارب 24 ميجا بايت

عند فتح هذا اللينك ستجد زر مكتوب عليه Download

.........

البرنامج الثاني هو بيئة التطوير , أي المكان الذي سنكتب فيه تعليمات البرنامج ونجربه

يوجد هناك عدة بيئات تطوير مجانية متوفره منها بيئة ميكروسوفت بإصدارها المضغوط Express

لتحميل C# 2005 Express

حجم الملف يقارب 450 ميجا بايت

إذا لم تستطع تحميل هذه البيئة فهناك بيئة أخرى مجانية

Sharp Developer

حجم الملف يقارب 4 ميجا بايت

لتنظيم العمل على الدروس ينصح عمل مجلد جديد على القرص المحلي D وتسميته CS

يجب أولاً تنصيب البرنامج الأول dotnetfx.exe

وعند الإنتهاء منها يتم تنصيب البيئة SharpDevelop2_2.0.0.1591_Setup.exe أو C# Express

وبهذا تكون مستعداً لتلقي الدرس الأول

..

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#3

الدرس الاول

مفهوم لغات البرمجة

منذ بداية ظهور الكهرباء وتطورها , ظهرت فكرة معالجة التيار الكهربائي والإستفادة منه

فمثلاً المصباح يأخذ الكهرباء ويعالجها "يحولها" إلى ضوء

والراديو يأخذ الكهرباء ويحولها إلى صوت .. وهكذا

وبالتالي فإن أي عمل مع الكهرباء يحتاج إلى ثلاثة أشياء مهمة

1- مدخلات "تيار كهربائي".

2-معالجة "تحويل التيار إلى ضوء , صوت....".

3-مخرجات "ضوء , صوت ....".

بالإضافة إلى جهاز التحويل "المصباح , الراديو"

الحاسوب لا يخرج عن هذه القاعدة فهو يحتاج إلى مدخلات ليعالجها ويحولها إلى مخرجات

مثلاً عندما تضغط اي زر في لوحة المفاتيح , فإن تيار كهربائي يتولد وينطلق بإتجاه المعالج

المعالج بدوره يحول هذا التيار إلى تيار مختلف ينطلق نحو الشاشة ويظهر الحرف

قد يتسائل البعض كيف يفرق المعالج بين زر وآخر في لوحة المفاتيح , فجميع الأزرار تطلق تيار كهربائي

وهذا هو أساس العمل في الحاسوب , حيث أن معالج الكمبيوتر لا يستقبل تيار مستمر

كما في المصباح , أو في الراديو , أو في أي جهاز كهربائي

وإنما معالج الكمبيوتر يستقبل تيار متغير ,

للتوضيح نفرض أن العدد 1 يمثل مرور تيار والعدد 0 يمثل عدم مرور التيار

عندما يكون المصباح مطفأ يكون التيار الذي يستقبله هكذا

0000000000000000

أما عندما نضيئ المصباح فإن التيار يكون هكذا

1111111111111111

وهكذا مع الراديو و المكواه و.و.و.

لكن في الحاسوب يختلف شكل التيار لأنه يكون متغير فيكون شيئاً هكذا

110001010100011110101000111010101001

وهذه هي الطريقة التي يفرق المعالج حرف عن حرف آخر فالتيار الذي يمثل حرف الواو مثلاً يكون هكذا

11001010 وحرف الطاء يكون هكذا 10111010 وحرف النون يكون هكذا 01010011

وبالتالي فإن كلمة وطن ستكون هكذا

010100111011101011001010

ولا ننسى أن معنى 0 عدم مرور تيار و معنى 1 مرور تيار وبإفتراض أن سرعة قراءة المعالج لرقم هي ثانية واحد

فأن التيار الكهربائي الذي يمثل حرف الواو 11001010 سيكون هكذا:

في البداية ينقطع التيار لفترة ثانية ثم يمر التيار لمدة ثانية

ثم ينقع لمدة ثانية ثم يمر لمدة ثانية ثم ينقطع لمدة ثانيتين ثم يمر لمدة ثانيتين

أي أن المعالج سيستغرق ثمان ثواني لقراءة حرف الواو

في المثال السابق افترضنا أن سرعة المعالج هي ثانية واحدة لكنها في الحقيقة أسرع بكثير

ومن هنا أعتقد انا فهمنا ما معنى سرعة المعالج "هي سرعة قراءته للرقم الواحد"

والرقم الواحد سواءاً كان 1 أو 0 يسمى "بت" Bit

فعندما تكون سرعة المعالج 3200 يعني أنه يقراً 3200 ميجا بايت في الثانية الواحدة

والميجا يحتوي على 1024 كيلو بايت والكيلو بايت يحتوي على 1024 بايت

والبايت يحتوي على 8 بت

يعني أن هذا المعالج يقراً 3277832 بت في الثانية الواحدة

يعني أنو بيقرأ حرف الواو في مدة 0.00000244 من الثانية

والآن بعد أن عرفنا كيف يقرأ الكمبيوتر الكلمات بقي أن نعرف كيف ينفذ الكمبيوتر الأوامر المطلوبة منه.

كان الحاسوب في بدايته يستقبل الأوامر كتيار كهربائي مثل ما رأينا سابقاً

لكن هذه الطريقة غير عملية , فإذا أردنا أن نأمر الكمبيوتر بأن يطبع كلمة وطن على الشاشة

فسيكون الأمر شبيهاً بهذا 01010011101010101011010100111011101011001010

فهذه هل اللغة التي يفهمها الحاسوب , لكنها لغة صعبة الفهم على الإنسان

لذلك ظهر ما يسمى بلغات البرمجة " وهي لغات قريبة من لغة الإنسان ويفهما الحاسوب"

حيث أن لغات البرمجه سهلت التعامل مع الحاسوب وأصبح من الممكن إصدار الأوامر للحاسوب هكذا

Print "وطن"

وحيث أن الحاسوب لا يفهم هذه اللغة يوجد ما يسمى بالمترجم , وهو برنامج ملحق بلغة البرمجة

وظيفته قراءة الأوامر المدخلة وتحويلها إلى تيار يفهمه المعالج , لكن عملية الترجمة تتم بشكل غير ظاهر

فما على المبرمج إلا أن يكتب الأوامر ويشغل البرنامج .. والمترجم يقرأ Print "وطن" ويحولها إلى

01010011101010101011010100111011101011001010 ويرسلها إلى المعالج..

مفهوم الكائنات

في لغات البرمجة كل شيئ يعتبر كائن له صفات وله أفعال كأي كائن في الوجود

فمثلاً السيارة كائن له صفات "مثل اللون والشكل وعدد الإطارات...." وله أفعال مثل "السير , التوقف, ..."

لا حظوا أن الأفعال قد تكون من الكائن نفسه "السير" و قد تكون من كائن آخر

في الحاسوب أيضاً الأمر لا يختلف فكل شيئ يعتبر كائن له صفات وأفعال

فمثلاً هذا المنتدى كائن له صفات وأفعال

وزر"إقتباس" تحت هذه المشاركة هو كائن له صفات مثل اللون

و الكلام المكتوب عليه و الحجم... وله أفعال مثل أنه يعمل رد جديد مع إقتباس الرد الحالي...

و صندوق النص في آخر هذه الصفحة عند الرد السريع ,

يعتبر كائن له صفات كاللون وله أفعال كإرسال الرد إلى قاعدة بيانات المنتدى..

وزر ابدأ أو Start في الوندوز هو كائن وشريط المهام Task Bar هو كائن يحتوي على كائن آخر "زر ابدأ"

إذاً يمكن لكائن أن يحتوي على عدة كائنات فالسيارة كائن يحتوي على كائن آخر وهي الإطارات مثلاً

التطبيق

بعد تنصيب البرامج افتح مجلد CS الي أنشأناه في القرص D

وداخل المجلد CS قم بإنشاء مجلد جديد اسمه Projects

من سطح المكتب لإتح ايقونة برنامج بيئة التطوير وهذا شكلها:

image1-1.jpg

بعد أن تفتح البيئة سيظهر لك زرين في الوسط هكذا :

image1-2.jpg

أنقر على زر New Solution المؤشر عليه بالأحمر

ستظهر لك هذه النافذة:

image1-3.jpg

أنقر لى إشارة + الموظحه في رقم 1 ثم انقر علىwindows applications كما في رقم 2

ثم أنقر على Windows Application كما في رقم 3 , عند صندوق اسم المشروع أكتي إسم المشروع الذي ترغب به وليكن

MyMediaPlayer كما في رقم 4 ثم انقر على الزر في رقم 5 وإختر مجلد Projects

الذر أنشاته سابقاً داخل مجلد CS في القرص D ثم أنقر على زر Create في رقم 6

بتظهر لك نوافذ المشروع وفيها شفرة المشروع الإفتراضية , تحت نافذة الشفرة انقر على زر Design كما في الصورة

image1-4.jpg

ستظهر أمامك هذه النوافذ:

image1-5.jpg

في اليسار انقر على Windows Forms كما في رقم 1 ستظهر لك جميع الكائنات التي نحتاجها في البرامج

وفي الوسط ستظهر لك نافذة فارغة نسميها Form وهذه النافذة هي النافذة الرئيسية للمشروع

ولا ننسى إن هذه النافذة تعتبر كائن لها صفات مثل إسمها " MyMediaPlayer" ولها أفعال مثل ما سنلاحظ لاحقاً

على اليسار يوجد جدول وهذا هو جدول صفات الكائنات ومن خلاله يمكن تغيير أي صفة من صفات الكائن

ما رأيك لو قمنا بتغيير لون النافذة إلى الأزرق.. نذهب إلى جدول الخصائص ونبحث عن خاصية BackColor

ننقر على الصندوق أمامها ستظهر قائمة ألوان , نختار منها أي لون وليكن الأزرق

نلاحظ أن لون النافذة تغير , يعني أننا غيرنا صفة من صفات هذا الكائن

الآن نرجع الكائن للونه الطبيعي

يوجد صفة أيضاً مهمة إسمها Text إبحث عنها في جدول الصفات عند رقم 2

ستجد مكتوب أمامها MyMediaPlayer

إمسحها وأكتب بدلها "مشغل الصوت والفيديو".

ملاحظة: لسهولة الوصول إلى الصفات يمكن ترتيب الصفات بالترتيب الأبجدي بالنقر على زر الترتيب في أعلى جدول الصفات :

image1-6.jpg

من نافذة الأدوات على اليسار انقر على صورة الزر المكتوب أمامه Button

واستمر في الضغط واسحب الماوس فوق النافذة الفارغة

سيكون شكل النافذة هكذا:

image1-7.jpg

يمكن تغيير حجم أو موقع الزر , الآن تأكد من إختيار الزر و اذهب إلى نافذة الصفات

إبحث عن صفة اسمها Text وأكتب بدل button1 أكتب "ترحيب".

لاحظ أنا غيرنا صفة من صفات الزر , ولكن كيف نغير من أفعال الزر لأنه كائن ولا بد له من أفعال

والزر يمكن أن يفعل أي شيء لكنا نريده أن يظهر رسالة ترحيب ..

للذهاب إلى أفعال الزر أنقر نقراً مزدوجا Double Click على الزر , ستظهر لك نافذة الشفرة :

image1-8.jpg

وينتقل مؤشر الماوس إلى مكان بين حاصرتين مكتوب فوقة void Button1Click...

ومعنى هذا أن المعالج عند ضغط الزر سينفذ الأوامر المكتوبة بين الحاصرتين

لا تهتم للشفرة المكتوبة فوق ولا تعدل فيها أبدا فهي مهمه لتشغيل البرنامج

الآن بين الحاصرتين يجب أن نكتب الأمر الذي يظهر الرسالة وهذا الأمر هو

MessageBox.Show("مرحباً بكم إلى سي شارب");

لنشرح الأمر , أولا MessageBox هو كائن في لغة البرمجة يمثل إظهار رسالة

و Show هو كائن أخر داخل كائن MessageBox ويقوم بطباعة الرسالة على الشاشة

وكلمة "مرحباً بكم إلى سي شارب" تعتبر مدخل للكائن وهو يعالج الأمر ويخرج الرسالة على الشاشة

لاحظ أن الأمر MessageBox.Show يعني أظهر رسالة , ولكن المعالج لن ينفذة لأنه لا يعرف ماذا يكتب في الرسالة

لذلك يجب فتح قوس وكتابة الرسالة بين علامة إقتباس , والقوسين تعني أن بينهما مدخلات ,

أما علا مة الأقتباس فهي مهمة لأنه بدونها سيعتبر المترجم أن مرحباً بكم إلى سي شارب هي جزء من الأمر

ولا يفهم هذا الأمر لذلك لن يعمل البرنامج ويجب أن تكون الرسالة بين علامتي أقتباس حتى يتجاوزها المترجم

في نهاية السطر يجب كتابة الفاصلة المنقوطه حتى نخبر المترجم أن هذه هي نهاية السطر وينتقل إلى السطر التالي

ملاحظة: يجب أن تكون حذراً جداً عند كتابة الشفرة فزيادة نقطة أو حرف تجعل المترجم يرتبك ولا يشغل البرنامج

وأيضاً يجب مراعاة الأحرف الكبيرة والصغيرة

فالمترجم لن يفهم هذا الأمر messagebox بينما يفهم هذا الأمر MessageBox

بقي لنا أن نشغل البرنامج ونرى كيف سيعمل , لتشغيل البرنامج أنقر على زر التشغيل أعلى نافذة الشفرة:

image1-9.jpg

عند تشغيل البرنامج ستظهر لك النافذة الأساسية وعند النقر على زر الترحيب ستظر رسالة الترحيب:

image1-10.jpg

مبروك لقد نجحت في تنفيذ أول برنامج بلغة C#

الواجب

أنشئ مشروع جديد و انشئ فيه زر لرسالة ترحيب

غيّر لون النافذة الأساسية , و غير حجمها , وغير لون الزر وغير حجمه

من الممكن أيضاً إنشاء زر آخر يظهر رسالة أخرى وأرسل التطبيق

لإرسال التطبيق:

اذهب إلى مجلد CS في القرص D ثم إلى مجلد Projects ثم إلى مجلد MyMediaPlayer

ثم إلى مجلد bin ثم إلى مجلد Debug ستجد ملف تنفيذي بإسم MyMediaPlayer

هذا هو برنامجك الأول .. أضغطه ببرنامج الونزيب وأرسله لي

ملاحظة:عند عمل الواجب أو عند تجربة كائنات أخرى , أنشئ مشروع جديد

للعبث به , لكن لا تغير أي شيئ في المشروع الذي نطبق عليه

.نهاية الدرس الأول.

..

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#4

جزاكم الله خيرا واثابكم ....ولكن هل من الممكن طرح كود برنامج تشغيل الصوتيات والمرئيات ومساعدتى فى عمل برنامج يحول بين ضيغات ملفات الصوت ..ربنا يكرمكم برجاء مساعدتى وعدم الكسل عن المساعدة

#5

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

إسماعيل الحلو كتب:
مشكور على هذا الجهد

إن شاء الله تستفيدوا منه أقصى استفادة

وتقدر تتابع معنا

ahmed17 كتب:
جزاكم الله خيرا واثابكم ....ولكن هل من الممكن طرح كود برنامج تشغيل الصوتيات والمرئيات ومساعدتى فى عمل برنامج يحول بين ضيغات ملفات الصوت ..ربنا يكرمكم برجاء مساعدتى وعدم الكسل عن المساعدة

أخي العزيز بالنسبة لكود التطبيق الذي نعمل عليه

نود أن نشير إلى أن هدف الدروس هي بناء التطبيق خطوة خطوة

بغية الفهم الكامل لكل مكوناته , وليس الإطلاع على الكود جاهز

نود أن يشعر المتلقي أنه أنجز شيئاً مفيداً بنفسه

وإن أردت تطبيقات أو شفرات مصدرية فالإنترنت مليئة بأكواد ممتازة لا يعد تطبيقنا شيئاً أمامها

أما برنامج التحويل بين صيغ الملفات الصوتية فأتمني ان تساعدك هذه المقالات :

http://www.brothersoft.com/software_...dsp_27168.html

http://www.codeproject.com/cs/media/...select=1593207

جزانا الله الخير واياك ^^

takey1 كتب:

بارك الله فيك وفي ما قد عملته بكل صراحة مشجهوود جبار ويعطيك ألف عافية

وأثابك الله أخي الفاضل

لو تكرمت هذه الدروس تأكد أنها مفيدة جداااا يا عزيزي

بارك الله لك أخي

بإذن الله مستمرين للنهاية

إن شاء الله تتابع معنا وترسل التطبيقات ...

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#6

السلام عليكم ورحمه الله وبركاته

ربنا يجعل هذا العمل فى ميزان حسناتك إن شاء الله

الحمد لله تم قرأت الدرس وعمل الواجب أيضا

MyMediaPlayer.zip

#7

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

الدرس الثاني

المتغيرات

في الدرس الأول تعلمنا أن كل شيئ في الحاسوب يعتبر كائن

وفي الحقيقة هناك نوعين من الكائنات :

كائنات حقيقية: وهي التي لها صفات وأفعال ويمكن أن يكون لها تمثيل مرئي

متغيرات : وهي متغيرات لا تحتوي على صفات أو أفعال وإنما تحتوي على قيمة محددة ولا تكون مرئية

أي انه من الممكن أن يحتوي الكائن "المتغير" X على قيمة مخزنة في ذاكرة الحاسوب

ومن الممكن أن تكون قيمة المتغير أما رقم أو نص أو حرف أو رقم عشري أو....

وإذا أردنا أن ننشئ متغير في ذاكرة الحاسوب فيجب أن نحدد نوع القيمة التي سيحملها المتغير

مع العلم أننا نختار إسم الكائن كما نشاء مادام الإسم يحقق الشروط التالية:

1-أن يكون اسم المتغير حروف أو ارقام لاتينية

2-أن لا يكون أول حروف الإسم رقم , فهذا الإسم غير مسموح 5int بينما هذا مسموح int5

3-أن لا يحتوي الإسم على علامات أواشارات مثل # أو $ أو * أو + , الإشارة المسموحة فقط هي _

وهذه الشروط تنطبق على أسماء الكائنات أو المتغيرات التي سنقوم بإنشائها

إذاً المتغير هو كائن يستخدم لتخزين قيمة من نوع محدد

مثلاً إذا أردنا أن نعرف متغير اسمه x من نوع رقم سيكون الكود كالتالي:

int x;

وكلمة int إختصار لكلمة integer ومعناها عدد صحيح

الكود السابق معناه أنا عرفنا متغير اسمه x سيحمل قيمة من نوع عدد صحيح

لاحظ أنك تستطيع تغيير اسم المتغير كما تشاء المهم أن تراعي شروط التسمية الثلاثة

وإذا أردنا تحميل هذا المتغير قيمة محدد يكون الكود كالتالي:

x=20;

الكود السابق معناه أن المتغير x يحمل القيمة 20 ويستمر بحمل القيمة حتي يتوقف البرنامج أو نحملة قيمة أخرى

لاحظ الكود التالي:

int Var1;
  int Var2;
  Var1=10;
  Var2=Var1;

قمنا بتعريف متغيرين من نوع رقم صحيح ثم حملنا الرقم الأول قيمة 10

وفي السطر الأخير حملنا المتغير الثاني قيمة المتغير الأول أي أن المتغير الثاني يحمل أيضاً القيمة 10

ملاحظة مهمه:في لغات البرمجه معامل التساوي ليس تبادلي يعني أن

Var2=Var1

لا تساوي أبداً

Var1=Var2

لإن معامل = في لغات البرمجة يقوم بنقل قيمة المتغير في اليمين إلى المتغير في اليسار

فلو عكسنا المعاملات في السطر الأخير من الكود السابق هكذا :

int Var1; 
 int Var2; 
 Var1=10;
  Var1=Var2;

فسيظهر لنا خطأ عند السطر الأخير لأن المعالج سيحاول نقل ما في المتغير Var2 إلى المتغير Var1

ولكن المتغير Var2 لا يحتوي على أي قيمة لذلك سيظهر لنا الخطأ

بعض أنواع المتغيرات وكيفية تعريفها:

رقم صحيح int

نص أو كلمة string

رقم حقيقي "رقم يقبل الكسور العشرية مثل 41.51" double

حرف char

تاريخ أو وقت DateTime

قيمة بوليانية bool

معنى القيمة البوليانية أي أن المتغير يحمل قيمة صح أو خطأ , للتوضيح:

int k;
 string w;
 double m;
 char n;
 bool p;
 k=15;
 w="هذا نص";
 m=12.15;
 n='م';
 p=true;

لا حظ أن المتغير من نوع رقم لا يحتاج إلى علامتي إقتباس

بينما المتغير من نوع نص أو حرف يحتاج إلى علامتي إقتباس

المتغير من نوع bool يحمل أما قيمة true أو false

ماذا لو جربنا الكود التالي:

k="نص";

سيظهر لنا خطأ لأنا نحاول أن نحمل المتغير k قيمة من نوع نص

بينما المفروض أن يحمل قيمة من نوع رقم كما عرفناه

وأيضاً هذا الكود خاطئ لنفس السبب

k=w;

حيث أن w يحتوي على قيمة من نوع نص و k المفروض أن يحمل قيمة من نوع رقم

ماذا لو كان لدينا هذا الكود:

w="45";
  k=w;

سيظهر لنا خطأ أيضاً عند السطر الثاني بالرغم من أن w يحمل رقم

لأن المترجم لا يعرف أن w يحمل رقم , فهو يعتبر كل ما هو بين علامتي اقتباس على أنه نص

وبالتالي فالمترجم لن يقبل أن يحمل k قيمة نصية لأن من المفروض أن يحمل رقم

للتغلب على هذه المشكلة يوجد في بيئة التطوير كائن للتحويل ما بين الأنواع

وهذا الكائن يقوم بتحويل القمية إلى أي نوع فإذا اردنا تنفيذ الكود السابق بإستخدام كائن التحويل:

w="45"; k=Convert.ToInt32(w);

الكائن Convert قام بأخذ قيمة w وحولها إلى رقم ثم حملها للمتغير k

لاحظ أننا للوصول إلى أفعال أو صفات الكائن نكتب اسم الكائن ثم نقطة ثم فعل أو صفة الكائن

فالكائن Convert يحتوي على فعل ToInt32 لذلك كتبنا اسم الكائن ثم نقطه ثم فعل الكائن

ووضعنا بين القوسين المدخلات , ومن أفعال الكائن Convert:

ToInt32 للتحويل إلى رقم صحيح كما رأينا في المثال السابق

ToString للتحويل إلى نص

ToDouble للتحويل إلى عدد عشري

ToChar للتحويل إلى حرف

ToBoolean للتحويل إلى قيمة بوليانية

ملاحظة: الرقم الأخير من المتغير ToInt32 يعني حجمة في الذاكرة, مثلاً int16 حجمه 16 بت و int32 حجمة 32 بت

ويوجد أيضاً 64, وكل نوع له مدى محدد لا يستطيع يتجاوزه, مثلاً int16 يستطيع خزن أي رقم من – 32,768 إلى 32,767

و int32 يستطيع خزن أي رقم من – 2,147,483,648 إلى 2,147,483,647

و int64 له مدى أكبر بكثير, لذلك إخترنا int32 كحل وسط , لأنه يخزن أرقام كبيرة , ولا يستهلك مكان كبير في الذاكرة

يتبع ... التطبيق.. في الرد التالي

..

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#8

التطبيق:

أفتح مشروع التطبيق الذي طبقنا عليه في الدرس الماضي

غير النص الكتوب في الزر من "ترحيب" إلى "اظهار قيمة x" من خلال تعديل الصفة Text من جدول الصفات

انقر نقراً مزدوجا على الزر لتنتقل إلى شفرة الزر .. ثم قم بحذف سطر الأوامر التالي:

MessageBox.Show("مرحباً بكم إلى سي شارب");

في مكان الكود المحذوف أكتب الكود التالي:

int x;
		x=50;
		MessageBox.Show(x);

في السطر الأول عرفنا متغير اسمه x سيحمل قيمة من نوع رقم صحيح

في السطر الثاني حملنا المتغير x قيمة 50

في السطر الثالث كتبنا أمر اظهار الرسالة , لاحظ أننا وضعنا x بدل نص الرسالة

حيث أن المترجم سيقوم بإظهار رسالة ويكتب داخلها القيمة المحملة على x

قبل تجربة البرنامج , هل تعتقد أن هناك خطأ في الشفرة السابقة؟

نعم هناك خطأ فلو جربت تشغيل البرنامج ثم الضغط على الزر ستظهر لك رسالة خطأ

وسبب الخطأ أن كائن MessageBox.Show يحتاج إلى مدخلات من نوع نص ليظهرها في الرسالة

وقد مررنا x على أنه المدخلات ولكنه من نوع رقم صحيح

ربما يتسائل البعض ما أدراني أن الكائن MessageBox.Show يحتاج إلى مدخلات من نوع نص وليس من نوع رقم

الأمر بسيط جداً , إذا كنت تريد ان تعرف نوع المدخلات التي يحتاجها الكائن

سيظهر لك ذلك في رسالة صغيرة بمجرد أن تفتح القوس الأول كما في الصورة:

image2-1.jpg

عندما انتهيت من كتابة القوس الأول ظهر صندوق المعلومات وأظهر اسماء وانواع المدخلات التي يحتاجها الكائن

السهم يشير إلى الكلمة التاليه:

اقتباس
string text

الجزء الأول من الكلمة السابقة يعني نوع المدخل وهو string أي نص

والجزء الثاني هو أسم المدخل text وهذا سنشرحه فيما بعد ,

ولكن ما يهمنا هو الجزء الأول لنعرف نوع المدخل الذي يحتاجه الكائن

ملاحظة:بعض الكائنات ومنها كائن MessageBox.Show يمكن أن تقبل مدخلات متعدده

فيمكن أن تقبل مدخل واحد وهو نص الرسالة كما رأينا في الدرس السابق و يمكن أن تقبل أكثر من مدخل

الكائن MessageBox.Show يقبل 21 نوع من المدخلات

ومن الممكن أن تتجول بين أنواع المدخلات الممكنه للكائن بالضغك على زر الأسهم فوق وتحت

في لوحة المفاتيح عند ظهور صندوق معلومات المدخلات كما في الصورة:

image2-2.jpg

ولكن ما يهمنا حالياً من أنواع المدخلات هو النوع رقم 15 الذي يحتاج فقط لنص الرسالة

نعود إلى الكود السابق الذي أظهر لنا خطأ نتيجة تضارب انواع البيانات

لحل مشكلة التضارب نستخدم كائن التحويل لتحويل قيمة x إلى نص ثم تمريرها إلى الكائن

MessageBox.Show

لأنه كما قلنا لا يقبل إلا مدخلات من نوع نص و x من نوع رقم

الكائن الذي يحول من رقم إلى نص هو Convert.ToString

وبالتالي سيصبح الكود الصحيح هكذا:

int x;
		x=50;
		MessageBox.Show(Convert.ToString(x));

جرب البرنامج الآن واضغط على الزر ستظهر لك رسالة مكتوب عليها 50

وهكذا تغلبنا على مشكلة تضارب البيانات

..

لتوسيع التطبيق سنستخدم كائن آخر من كائنات البيئة وهو مربع النص

اضغط على زر Design أسفل الشفرة لترجع إلى نافذة التصميم

image2-3.jpg

الآن قم بسحب كائن مربع النص وأفلته فوق النافذة كما سحبت الزر في الدرس الأول

image2-4.jpg

ليصبح شكل النافذة هكذا:

image2-5.jpg

تأكد من إختيار مربع النص واذهب إلى جدول الصفات

إبحث عن الصفة (Name) ستجد مكتوباً أمامها textBox1 غيرها إلى t1

لاحظ أنا غيرنا إسم الكائن من textBox1 إلى t1 وذلك لسهولة التعامل معه في الشفره كما سنرى لاحقاً

الآن اضغط مزدوجاً على الزر لترجع إلى الشفرة

أمسح السطر الثاني من الكود السابق وأكتب بدل منه هذا الكود

x=t1.Text;

لاحظ أن الكائن t1 الذي هو مربع النص له صفة اسمها Text وهي تمثل النص المكتوب عليه

معنى الكود السابق أن المترجم سيقوم بأخذ ما هو مكتوب في مربع النص المسمى t1 ويحمله للمتغير x

أي أن الكود كاملأ سيصبح هكذا:

int x;
		x=t1.Text();
		MessageBox.Show(Convert.ToString(x));

ملاحظة:لمعرفة صفات وأفعال الكائن أكتب إسم الكائن ثم أكتب نقطة ,

ستظهر لك نافذة بجميع اعمال وصفات الكائن ففي المثال السابق بمجر د كتابة تكتب t1 ثم نقطة

سيظهر لك هذا الصندوق :

image2-6.jpg

وبمجرد أن تكتب حرف t من كلمة Text سينقل الإختيار في الصندوق إلى كلمة Text:

image2-7.jpg

وللإختصار اضغط على زر Tab لكي تكتب كلمة Text آلياً

لاحظ في الصورة السابقة أن نوع صفة Text هو string أي نص

وبالتالي لو حاولت تنفيذ البرنامج وضغط الزر سيظهر خطأ لأننا حاولنا أن نحمل المتغير x قيمة نصيه

بينما يجب أن نحملة رقم , يأتي دور كائن التحويل مرة أخرى ولكن هذه المرة من نص إلى رقم

فيصبح الكود الكامل والصحيح هكذا:

int x; 
	   x=Convert.ToInt32(t1.Text); 
	   MessageBox.Show(Convert.ToString(x));

في السطر الأول عرفنا متغير من نوع رقم

وفي السطر الثاني حملنا هذا المتغير القيمة المكتوبة في مربع النص وحولناها إلى رقم

وفي السطر الثالث لم نغير شيء

الآن نفذ البرنامج , وقبل أن تضغط الزر أكتب أي رقم في مربع النص ثم اضغط الزر

ستظهر لك رسالة بالرقم الذي كتبته

تأكد انك ستكتب رقم وليس حرف وإلا ظهرت لك رسالة خطأ

..

يتبع >>

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#9

لتوسيع التطبيق أضف متغيرين آخرين y,z وأضف مربع نص آخر وسمه t2

غير النص المكتوب على الزر وأكتب بدلاً منه "اظهار ناتج الجمع"

ليكون شكل النافذة هكذا:

image2-8.jpg

الآن اذهب إلى الشفرة وعدلها إلى التالي:

int x;
		int y;
		int z;
		x=Convert.ToInt32(t1.Text); 
	   y=Convert.ToInt32(t2.Text);
		z=x+y;
		MessageBox.Show(Convert.ToString(z));

عرفنا ثلاثة متغيرات من نوع رقم صحيح

في السطر الرابع حملنا x الرقم المكتوب في t1

وفي السطر الخامس حملنا y الرقم المكتوب في t2

وفي السطر السادس حملنا z مجموع x وy

وفي السطر السابع أظهرنا قيمة z في الرسالة , لاحظ أنا وضعنا z بدل x في السطر الأخير

الآن قم بتنفيذ البرنامج , وأكتب عدداً صحيحاً في كل مربع نص وأضغط الزر

ستظهر لك نافذة مجموع العددين :

image2-9.jpg

اغلق الرسالة وجرب أن تضع في أحد مربعات النص رقماً حقيقياً مثل 41.25 واضغط على الزر

ستظهر لك رسالة خطأ لأن المتغيرات xوyوz تحمل متغيرات من نوع رقم صحيح وأنت حاولت أن تحملها رقم حقيقي

اضغط على زر Continue في رسالة الخطأ ليتم إيقاف تنفيذ البرنامج:

image2-10.jpg

إذهب إلى الشفرة وحاول أن تجد الحل للقيام بجمع أعداد حقيقية, وذلك هو الواجب

تلميح:نعرف أن double تعني رقم حقيقي والكائن Convert.ToDouble يحول إلى رقم حقيقي

ما عليك إلا أن تضع double بدل من int

وتضعConvert.ToDouble بدل من Convert.ToInt32

لحظة , لم ينتهي الواجب بعد

أضف إلى البرنامج ثلاثة أزرار إضافية للقيام بباقي العمليات الرياضية

1-اظهار ناتج الطرح

2-اظهار ناتج الضرب

3-اظهار ناتج القسمة

ليصبح شكل النافذه هكذا:

image2-11.jpg

.نهاية الدرس الثاني.

..

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#10

شكراً لك على الشرح المفصل والوافي أخي العزيز

لدي بعض التعديلات على كودك لتقليل الأسطر إذا سمحت لي :)

كود الجمع x , y ووضعهعا في z

 int x = Int32.Parse(t1.Text);
			int y = Int32.Parse(t2.Text);
			int z;
			z = x + y;
			MessageBox.Show(z.ToString());
#11

سؤال صعب بالنسبالي بسيط بالنسبة ليكم ان شاء الله

كيف استطيع في البرنامج الخاص بي ان اجعل السي شارب عند ضغط اليوزر لاوكي تقوم بعمل اتربيوت attrib للملف الذي اختاره اليوزر

سؤال اخر

كيف استطيع ان اجعل برنامجي يتعامل مع شاشه الكوماند بكتابه امر معين فيها وتنفيذه دون ان تزعج المستخدم

سؤال اخير واتمني ان لا اكون اثقل عليكم

كيف استطيع في رسالة المسج بوكس التي اريدها ان تظهر ان اكتب " حيث عند قيامي بكتابتها يعطيني الفيجوال ستوديو ايرور حيث يحسبها نهايه الجمله وبالتالي مابعدها خطا, مثلا

"contact me on "my email""
#12

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

Pro_S00

اقتباس
لدي بعض التعديلات على كودك لتقليل الأسطر إذا سمحت لي

كود الجمع x , y ووضعهعا في z

خذ راحتك أخي في تغيير الكود كما تحب

المهم في النهاية هي النتيجة

والطريقه في الدرس مع انها أطول لكن فهمها أسهل بالنسبة للمبتدئين

anoos1973

اقتباس
كيف استطيع في البرنامج الخاص بي ان اجعل السي شارب عند ضغط اليوزر لاوكي تقوم بعمل اتربيوت attrib للملف الذي اختاره اليوزر

عذراً أخي , لم أفهم ما الذي تقصده بـ"عمل اتربيوت للملف"

هل تقصد إظهار خصائص الملف ؟ أم تغيير خصائصه ؟

عموماً كلا الطريقتين تتم بإستخدام الخاصية Attributes من خصائص الكائن FileInfo

أولاً تأكد من كتابة عبارة using التالية :

using System.IO;

مثلاً لدينا الملف y.txt الموجود في القرص c

لإسترجاع خصائصة :


FileAttributes objFileAttributes = objFileInfo.Attributes;
MessageBox.Show(objFileAttributes.ToString());
	   FileInfo objFileInfo = new FileInfo(@"c:\y.txt");

الكود السابق يظهر رسالة تظهر جميع خصائص الملف

أما إذا أردت التأكد من خاصية معينه , مثلاً التأكدمن أن الملف للقراءة فقط :


FileAttributes objFileAttributes = objFileInfo.Attributes;
if ((objFileAttributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
MessageBox.Show("الملف للقراءة فقط");
}
else
{
MessageBox.Show("الملف ليس للقراءة فقط");
}
			FileInfo objFileInfo = new FileInfo(@"c:\y.txt");

ولتغيير خصائص الملف :

			File.SetAttributes(@"c:\y.txt", FileAttributes.Hidden);

الكود السابق يغير الخاصية hidden إلى true في خصائص الملف

إذا لم تجد إجابة لسؤالك , فالرجاء توضيح السؤال أكثر

اقتباس
كيف استطيع ان اجعل برنامجي يتعامل مع شاشه الكوماند بكتابه امر معين فيها وتنفيذه دون ان تزعج المستخدم

تأكد من إضافة عبارة using التالية :

using System.Diagnostics;

الكود التالي يقوم بتشغيل الأله الحاسبة :


proc.CreateNoWindow = false;
proc.FileName = "calc.exe";
proc.UseShellExecute = true;
Process.Start(proc);
ProcessStartInfo proc = new ProcessStartInfo();

وللتعامل مع نافذة cmd يجب إستدعاء الملف التنفيذي كما فعلنا في الكود السابق وتمرير الأولمر من خلال الخاصية Arguments

قبل الأمر المراد تنفيذة ينبغي كتابة /K


proc.CreateNoWindow = false;
proc.FileName = "cmd.exe";
proc.Arguments = @"/K copy c:\y.txt d:\y.txt";
proc.UseShellExecute = true;
Process.Start(proc);
ProcessStartInfo proc = new ProcessStartInfo();

الكود السابق يستخدم محث الأوامر لنسخ الملف y.txt إلى القرص d

اقتباس
كيف استطيع في رسالة المسج بوكس التي اريدها ان تظهر ان اكتب " حيث عند قيامي بكتابتها يعطيني الفيجوال ستوديو ايرور حيث يحسبها نهايه الجمله وبالتالي مابعدها خطا, مثلا

"contact me on "my email""

أيضاً لم أفهم السوال

إذا كنت تقصد أنك تريد تضمين علامة الإقتباس " في الرسالة فيجب أن تضيف قبلها \ هكذا :

MessageBox.Show("He asked : \"What the hell is this?\"");

ناتج الرسالة هو :

He asked : "What the hell is this?"

..

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#13

السلام عليكم ورحمه الله وبركاته

الواجب الثانى مرفق فى الأسفل وأرجو إن كان هناك شئ فى الواجب أخى أن تعلق عليه وإن شاء الله أنا جاهز للتعديل وجزاكم الله خيراMyMediaPlayer.rar

#14

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

الدرس الثالث

الجمل الشرطية:

معظم عمل الحاسوب يقوم على المقارنة بين قيمتين لإتخاذ أي قرار

بعبارة أدق أي عمل يقوم به الحاسوب هو عبارة عن عدد من المقارنات

بين قيم مخزنة في مسجلات المعالج

مسجلات المعالج هي عبارة عن أجزاء من المعالج يمكن أن تخزن قيم صغيرة

وكل مسجل يستطيع أن يخزن 16 بت , وهذه القيم المخزنة يقوم المعالج بمقارنتها

مع قيم اخرى في مسجلات أخرى من نفس المعالج لإنتاج تيار كهربائي يمثل نتيجة المقارنة

إذاً مبدأ عمل الحاسوب هو المقارنه , عرفنا المقارنه على مستوى المعالج

ولكن هذا لا يهمنا , وما يهمنا هو المقارنه على مستوى لغة البرمجة

والمقارنه تعتبر أحد أهم اعمدة اي لغة من اللغات , وهناك عدة صيغ للمقارنة

1- إذا كان (الشرط) فـ

{التعليمات التي تنفذ في حالة توفر الشرط}

if (x>y) 
 {
  MessageBox.Show("إكس أكبر من واي"); 
 }

في الكود السابق سيقوم المعالج بإظهار الرسالة إذا كان x أكبر من y وإلا فلن تظهر أي رسالة

لاحظ أننا لم نضع الفاصة المنقوطة بعد الشرط لأن المعالج لم يكمل جملة الشرط ويجب أن ندعه يكمل

الجملة إلى نهاية الحاصرة الثانية

2-إذا كان (الشرط) فـ

{التعليمات التي تنفذ في حالة توفر الشرط}

وإلا

{التعليمات التي تنفذ في حالة عدم توفر الشرط}

if (x>

y)
 {
 MessageBox.Show("إكس أكبر من واي");
 }
 else
 {
 MessageBox.Show("إكس ليس أكبر من واي");
 }

في الكود السابق سيقوم المعالج بإظهار رسالة "إكس أكبر من واي" إذا كان x أكبر من y

أما إذا لم يكن x اكبر من y فستظهر رسالة "إكس ليس أكبر من واي"

لاحظ أننا لم نضع فاصلة منقوطة بعد كلمة else لأن التعليمة لم تكتمل بعد

3-إذا كان(الشرط1) فـ

{التعليمات التي تنفذ عن توفر الشرط1}

وإلا إذا كان (الشرط 2) فـ

{التعليمات التي تنفذ في حالة عدم توفر الشرط1 و توفر الشرط 2}

وإلا إذا كان ...

if (x>5)
 {
 MessageBox.Show("اكس أكبر من خمسة");
 }
 else if(x<4)
 {
 MessageBox.Show("اكس ليس أكبر من خمسة , وأكس أصغر من أربعة");
 }
 ..

في الكود السابق يبدأ المعالج بفحص الشرط الأول فإذا تحقق يظهر رسالة "اكس أكبر من خمسة"

وإن لم يتحقق فإنه ينتقل إلى الشرط الثاني فإذا تحقق سيظهر رسالة "اكس ليس أكبر من خمسة , وأكس أصغر من أربعة"

وهكذا حتي ينتهي من جميع الشروط .. لاحظ أنه من الممكن أن يكون في الجملة أكثر من شرطين

هناك عدد من معاملات المقارنه بالإضافة إلى < و >:

< أكبر من

مثل ما رأينا سابقاً

> أصغر من

مثل ما رأينا سابقاً

== يساوي

if (x == y)
 {
 MessageBox.Show("اكس يساوي واي");
 }

=! لا يساوي

if (x != y)
 {
 MessageBox.Show("اكس لا يساوي واي");
 }

أحياناً نحتاج إلى شرط مزدوج , أي أننا نحتاج إلى شرط مكون من جزئين

مثلاً إذا كان x أكبر من y و x أصغر من z

if (x>y & x<z)
 {
 MessageBox.Show("اكس أكبر من واي و أصغر من زد");
 }

لاحظ انا وضعنا الشرطين بينها علامة &

أما إذا أردنا شرط مزدوج من نوع آخر :

مثلاً إذا كان x أكبر من y أو x يساوي 10

if (x>y | x==10)
 {
 MessageBox.Show("اكس أكبر من واي أو يساوي 10");
 }

لاحظ انا وضعنا الشرطين بينها علامة |

إذا & تعني و

و | تعني أو

عند فصل الشرطين بـ | أو & فإن المترجم يقوم بفحص الشرطين مهما كانت نتيجة الشرط الأول

وهذا يعتبر إهدار لوقت المترجم و جهده في بعض الحالات , فمثلاً الشرط : إذا كان x أكبر من y أو x يساوي 10

في هذا الشرط المركب لو تحقق الشرط الأول , فالجملة المنطقية كلها صحيحة وبالتالي فلا داعي لأن يفحص المترجم الشرط الثاني

ولتنفيذ هذا الفحص الإنتقائي يجب تكرار علامة الشرط بين الشرطين , فالعلامة | يجب أن تكون || و & يجب أن تكون && :

if (x>y && x<z)
 {
 MessageBox.Show("اكس أكبر من واي و أصغر من زد");
 }

if (x>y || x==10)
 {
 MessageBox.Show("اكس أكبر من واي أو يساوي 10");
 }

ملاحظة : علامة | يمكن طباعتها بالضغط على Shift مع زر \ والذي عادة ما يأتي بجانب زر المسح BackSpace وفوق زر Enter

الدوارات:

هناك أنواع كثيرة من الدوارات لكننا سنتعرف حالياً على أهم نوع منها

والدوارات هي تعليمات فائدتها تكرار تعليمات محدد لعدد محدد من المرات

مثلاً إذا أردنا أن نظهر رسالة ما عشر مرات أو عشرين مرة , لن نكتب التعليمة عشر أو عشرين مرة

حيث يستخدم المعالج متغير من نوع رقم كعداد وفي كل مرة تنفذ العملية يزداد العداد رقم واحد

وهكذا حتى يتوفر شرط وقوف الدواره , وأحياناً قد يكون عداد عكسي يعني أنه في كل مرة ينقص رقم

إذاً هناك أربعة أشياء مهمة لجملة الدوارة for

1- متغير من نوع عدد يستخدم كعداد مع تزويدة برقم إبتدائي يبدأ منه

2- شرط إستمرار الدوارة في العمل

3- تعريف نوع العداد هل هو تصاعدي أم تنازلي

4- التعليمات التي تنفذ

for (int i = 0;i < 10;i++)
 {
 MessageBox.Show("من الدوارة");
 }

في الكود السابق كلمة for تستخدم لتعريف الدوارة

بعد فتح القوس وضعنا تعريف للعداد int i=0 ووضعنا له قيمة 0 أي أن العداد سيبدأ من 0

وضعنا فاصلة منقوطة وو ضعنا بعدها شرط الإستمرار في العمل وهو أن يكون i أصغر من عشرة

وضعنا فاصلة منقوطة ووضعنا بعدها نوع العداد وهو تصاعدي ++i أما إذا كان تنازلي نضع --i

ثم أغلقنا القوس وفتحنا حاصرتين بينهما التعليمات التي سينفذها المعالج

معنى الدوارة السابقة أن المعالج سيظهر الرسالة للمرة الأولى ثم يزيد i ويفحص شرط الإستمرار

أذا تحقق شرك الإستمرار يظهر الرسالة مرة أخرى ويزيد العداد برقم ويفحص شرط الإستمرار .....

في الكود السابق سيقوم المعالج بإظهار الرسالة عشر مرات

ملاحظة : يمكن إستخدام متغير العداد داخل التعليمات

for (int i = 0;i < 10;i++)
 {
 MessageBox.Show(Convert.ToString(i));
 }

في الكود السابق سيظهر المعالج الرسالة للمرة الأولى وفيها قيمة العداد الأولية وهي 0

وفي المرة الثانية سيظهر الرسالة وفيها قيمة العداد بعد أن زاد برقم أي 1

وهكذا حتى العدد 9 , وعندما يزد العداد بعدها برقم أي يصبح 10 سيفحص المعالج شرط الإستمرار

وهو أن يكوت المتغير أصغر من 10 ولكن المتغير هذه المرة ليس أصغر من عشرة لذلك سيتوقف

المعالج عن تنفيذ التعليمات ويخرج من جملة for

يتبع التطبيق

..

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#15

التطبيق:

أفتح تطبيق الدرس السابق :

وقم بحذف صندوقي النص بواسطة زر Delete

غير النص المكتوب في الزر إلى "تشغيل الدوارة"

من صندوق الأدوات قم بسحب أداة القائمة :

image3-1.jpg

من خلال الخاصية (Name) قم بتغيير إسم القائمة من ListBox1 إلى l1

ليسهل التعامل معها من الشفرة

ملاحظة: عند عمل تطبيق باللغة العربية يجب تحويل الأدوات في النافذه للترتيب العربي

أي من اليمين إلى اليسار ويتم ذلك عن طريق تحديد النافذة وتغيير صفتين من صفاتها

وهي صفات RightToLeft و صفة RightToLeftLayout من جدول الصفات

حيث تكون الخاصية الأولى Yes والخاصية الثانية True :

image3-2.jpg

عندها ستلاحظ ان إتجاه الأدوات تغير ويصبح شكل النافذة هكذا :

image3-3.jpg

الآن اضغط مزدوجاً على الزر للذهاب للشفرة قم بحذف الكود الموجود مسبقاً بين الحاصرتين

وأكتب بدلاً عنه هذا الكود:

for (int i=0;i<10;i++)
 {
 l1.Items.Add("   من الدوارة   ");
 }

قمنا بعمل دوارة من الصفر إلى 10 لإضافة كلمة "من الدوارة" إلى القائمة

الكائن l1.Items.Add يقوم بإضافة ما داخل القوس للقائمة l1

وبالتالي فالكود السابق سيقوم بكتابه كلمة "من الدوارة" عشر مرات على القائمة

جرب تشغيل البرنامج وإضغط على الزر , يجب أن ترى شيئاً كهذا:

image3-4.jpg

ملاحظة : إذا أردنا أن نجمع كلمتين أو نصين في نص واحد فيمكننا إستخدام إشارة +

مثلاً إذا أردنا أن نظر رسالة تقول مرحباً بكم فيمكن عمل ذلك هكذا

MessageBox.Show("مرحباً" + "بكم");

هناك كلمتين ربطنا بينهما بعلامة +

والآن لنعدل التطبيق قليلاً لكي نجرب إستخدام العداد :

قم يتعديل كود الدوارة وأضف إلى كلمة "من الدوارة" أضف العداد هكذا:

for (int i=0;i<10;i++)
 {
 l1.Items.Add("   من الدوارة   " + Convert.ToString(i));
 }

بما أن العداد من نوع رقم إستخدمنا كائن التحويل لنحوله إلى نص ثم ربطناه بكلمة "من الدوارة"

عند تشغيل البرنامج سترى شيئاً كهذا :

image3-5.jpg

أعتقد أن الصورة لا تحتاج للشرح ...

الآن لماذا لا نطبق جملة شرطية داخل الدوارة ..

سنكتب شفرة لطباعة كلمة "من الدوارة"

و إذا كان العداد أكبر من خمسة سنضيف كلمة "أكبر من خمسة" :

قم بتغيير كود الدوارة إلى هذا الكود:

 for (int i=0;i<10;i++)
 {
 if (i>5)
 {
 l1.Items.Add("   من الدوارة   " + Convert.ToString(i) + "  أكبر من خمسة  ");
 }
 else
 {
 l1.Items.Add("   من الدوارة   " + Convert.ToString(i) );
 }
 }

الكود باللون الأحمر سينفذ عشر مرات .

والكود بالخط المائل سينفذ إذا كان العداد i أكبر من خمسة.

والكود الذي تحته خط سينفذ إذا كان العداد i أصغر من أو يساوي خمسة .

عند تنفيذ البرنمج ستكون النافذه هكذا :

image3-6.jpg

الواجب:

الواجب صعب قليلاً هذه المرة ...

إستخدم الدوارة والجمل الشرطية لتنفيذ عملية إضافة نصوص للقائمة 12 مرة

بحيث يكتب في آخر كل نص ما إذا كان العداد أكبر من 6 أو يساوي 6 أو أصغر من 6

لتكون النتيجة هكذا:

image3-7.jpg

تلميح : ستستخدم الجمل الشرطية من النوع الثالث بثلاث شروط

أي أن جملة الشرط ستكون شبيهة بهذه:

if (...)
 {
 ...
 }
 else if(...)
 {
 ...
 }
 else if(...)
 {
 ...
 }

أكمل الفراغات , طبعاً كل هذا داخل الدوارة

.نهاية الدرس الثالث.

..

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#16
عمرو الحمصى كتب:

السلام عليكم ورحمه الله وبركاته

الواجب الثانى مرفق فى الأسفل وأرجو إن كان هناك شئ فى الواجب أخى أن تعلق عليه وإن شاء الله أنا جاهز للتعديل وجزاكم الله خيراMyMediaPlayer.rar

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

تمام , تطبيقك صحيح لكن ليس كاملاً

تطبيقك لا يدعم الأعداد العشري

وقد أوضحنا في تطبيق الدرس طريقة عمل ذلك

راجع أخر سطور في قسم التطبيق من الدرس الثاني

موفق إن شاء الله

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#17

الواجب الثالث ولكن بوضع العداد إلى الـ 50

شكراًعلى الشرح الرائع عزيزي ..

عندي طلب صغير إذا كنت تستطيع عمله :)

أتمنى منك اضافة أداة ProgressBar للمشروع الثالث بحيث اني اذا ضغطت على زر " تشغيل " تبدا الأدة بالتحميل حتى تصل النهايه ثم يكتب الناتج في اللست بوكس ..

home_work.rar

#18

السلام عليكم ورحمه الله وبركاته

مشكور أخى على الملاحظه وهذا هو التعديل

MyMediaPlayer2_1.rar

#20

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

Pro_S00

اقتباس
أتمنى منك اضافة أداة ProgressBar للمشروع الثالث بحيث اني اذا ضغطت على زر " تشغيل " تبدا الأدة بالتحميل حتى تصل النهايه ثم يكتب الناتج في اللست بوكس ..

ممتاز تطبيقك للدرس الثالث

اما أداة ProgressBar فهي بسيطة جداً :

أضف الإداة إلى الفورم من صندوق الأدوات وليكن إسمها pb

قبل تعليمات الدوارة عرف متغير جديد من نوع Double وليكم إسمه step

وإسند له قيمة تمثل عدد تكرار الدوارة مقسوماً على 100

مثلاً لو كان عدد تكرار الدوارة 50 كما في تطبيقة :


double step=50/100;

وداخل حاصرتي الدوارة بعد عبارات if أضف كود التحريك :


pb.Value+=step;

عمرو الحمصى

تمام أخي , تطبيقاتك صحيحة وفيها لمسة مميزة

..

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#21

نفذت خطواتك ولكن يعطيني خطأ في سطر pb.value+=step

ياليت تسوي التطبيق في البرنامج وترفقه هنا ..

#22

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

الدرس الرابع

الإجراءات Procedures

الإجراء هو مجموعة أوامر ينفذها المعالج مكتوبة بين حاصرتين { }

ويتم تعرفها في مكان واحد في البرنامج ويمكن إستدعائها عدة مرات

والإجراء له ثلاثة أشياء مهمة :

1- تعريف الإسمName Decleration

2-المدخلاتParameters

3-الشفرة مكتوبة بين حاصرتين Code

فمثلاً عند الدخول إلى شفرة زر رسالة الترحيب في الدرس الأول

سنرى هذا الكود:

void Button1Click(object sender, System.EventArgs e)
  {
  MessageBox.Show("مرحباً بكم في اليس شارب");
  }

الكود السابق يمثل إجراء ينفذه المعالج عند الضغط على الزر

نلاحظ انه يحتوي على الثلاث الأشياء المهمة للإجراء

وهي تعريف الإسم:

void Button1Click

و المدخلات:

 void Button1Click(object sender, System.EventArgs e)

والشفرة مكتوبة بين حاصرتين:

{
   MessageBox.Show("مرحباً بكم في اليس شارب"); 
  }

في التعريف void تعني إجراء أي أننا سنعرف متغير من نوع إجراء

كما عرفنا متغير من نوع رقم في الدرس السابق:

int x;

بنفس الطريقة عند تعريف الإجراء:

void x;

لكن هذا التعريف لا يكفي فهو لا يحتوي على الثلاث الأشياء المهمة

مثلاً لو أردنا إجراء يظهر رسالة مكتوب عليها مثلاً "من داخل الإجراء"

فسكون التعريف كالتالي:

void sm()
  {
  MessageBox.Show("من داخل الإجراء");
  }

عرفنا متغير من نوع إجراء اسمه sm إختصار لـ Show Message ..يمكنك تغيير إسم الإجراء كما

تشاء

يوجد لدينا الإسم:

void sm

والمدخلات:

()

لا يوجد لدينا مدخلات في هذا الإجراء ولكن يجب عمل الأقواس الفارغة

وسنعرف فيما بعد كيف نتعامل مع المدخلات

ولدينا الشفرة:

{
   MessageBox.Show("من داخل الإجراء");
   }

وبالتالي فالتعريف كامل ويمثل إجراء لإظهار رسالة ,

والآن إذا أردنا في أي مكان من البرنامج تنفيذ الإجراء فما علينا سوى كتابة اسمه هكذا:

sm();

التعليمة السابقة تجعل المعالج يبحث عن الإجراء sm وينفذ الأوامر بداخلة.

ربما يقول البعض ما الداعي من عمل إجراء وكتابة الكود داخلة ثم إستدعاءه

لماذا لا نكتب الكود مباشرة كما فعلنا في الدرس الأول؟؟؟

والجواب ببساطه ماذا لو أردت إظهار الرسالة خمس مرات؟؟

بالطريقة القديمة ستكتب هكذا:

void Button1Click(object sender, System.EventArgs e)
  {
  MessageBox.Show("من داخل الإجراء");
  MessageBox.Show("من داخل الإجراء");
  MessageBox.Show("من داخل الإجراء");
  MessageBox.Show("من داخل الإجراء");
  MessageBox.Show("من داخل الإجراء");
  }

أما بطريقة الإجراءات فستكتب هكذا:

 void Button1Click(object sender, System.EventArgs e)
  {
   sm();
   sm();
   sm();
   sm();
   sm();
   }

   void sm()
  {
   MessageBox.Show("من داخل الإجراء"); 
  }

الكود بالأزرق هو كود الضغط على الزر و الكود بالأحمر هو كود إجراء إظهار الرسالة

نلاحظ أن طريقة الإجراءات تسهل التعامل أكثر وتوفر الوقت والجهد

ربما يقول البعض لا يوجد فرق كبير بين الطريقتين لكن ماذا إذا كانت الرسالة كبيرة جداً

أو ماذا إذا كانت الأوامر أكثر من مجرد إظهار رسالة

عندها بالتأكيد الإجراء سيوفر الكثير من الجهد والوقت

وإيضا المدخلات تجعل الإجراءات أكثر فائدة :

مثلاً لو أردنا أن نطور الإجراء السابق ليظهر رسالة مختلفة في كل مرة نستدعيه

سنجعل الرساله المراد إظهارها علي أنها مدخل متغير ويكون تعريف الإجراء كالتالي:

void sm(string msg)
   { 
  MessageBox.Show(msg);
   }

المدخلات هي متغيرات كما رأينا حيث عرفنا متغير مدخل اسمه msg من نوع نص string

وفي تعليمة إظهار الرسالة جعلنا الكائن MessageBox.Show يظهر ما في المتغير المدخل msg

الآن عند إستدعاء الإجراء يجب تمرير قيمة من نوع نص مكان المتغير المدخل هكذا:

sm("من داخل الإجراء");
  sm("رسالة مختلفة من نفس الإجراء");

نلاحظ أن الإجراء أظهر رسائل مختلفة بنفس الشفرة

الأمر الأول في الكود السابق سيظهر رسالة مكتوب عليها "من داخل الإجراء"

والأمر الثاني سيظهر رسالة مكتوب عليها "رسالة مختلفة من نفس الإجراء"

ملاحظة: إذا كان لدينا أكثر من مدخل فنفصل بينها بالفاصلة مثلاً:

void sm(int x,string msg)

وعند الإستدعاء :

sm(14,"رسالة");

الدوال Functions

الدول هي إجراءات لكن لها خاصية أنها ترجع قيم

رأينا في الإجراءات أنا نستدعيها للقيام بعمل محدد فقط

أما الدوال فإنا نستدعيها للقيام بعمل محدد وإرجاع قيمة لنا

ولها خمس أشياء مهمة:

1- تعريف الإسم Name Decleration

2-نوع القمية التي ستحملها الدالة Result Data Type

3-المدخلات Parameters

4-الشفرة مكتوبة بين حاصرتين Code

5-تعليمة تحميل الدالة للقيمة الناتجة Return phrase

مثلاً إذا إردنا عمل دالة تقوم بأخذ رقمين وترجع لنا مجموعهما فيكون التعريف كما يأتي:

int sum(int x,int y)
   {
   int z;
   z=x+y;
   return z; 
  }

في السطر الأول عرفنا دالة إسمها sum ترجع متغير من نوع رقم int

ولها مدخلين من نوع رقم x و y

وبين الحاصرتين لدينا التعليمات التي تقوم بجمع المتغيرين

وفي التعليمة الأخيرة return z تعني تحميل الدلة القيمة الموجود في z وهي مجموع xوy

وعند الإستدعاء بنفس الطريقة في الإجراءات لكن الدالة تكون محملة بقيمة :

sum(4,5);

بدون الدالة ستكود شفرة جمع رقمين هكذا:

int z;
   z=4+5;
   MessageBox.Show(Convert.ToString(z));

أما بإستخدام الدالة فتكون الشفرة هكذا:

int z;
   z=sum(4,5);
   MessageBox.Show(Convert.ToString(z));

لاحظ أنا استدعينا الدالة وحملنا ما داخلها للمتغير z

في المثال السابق تعرفنا كيف نستخدم الدالة , رغم اننا لم نستفد منها كثيراً في المثال السابق

ولكن كان الغرض منه توضيح إستخدام الدوال .

عزل - كبسلة المتغيرات Variables Encabsulation

مارأيك بالكود التالي:

 void Button1Click(object sender, System.EventArgs e)
   {
   int x;
   x=10;
   AddFive();
   } 
  
  void AddFive() 
  { 
  int y;
   y=5+x;
   MessageBox.Show(Convert.ToString(y)); 
  }

الكود بالأزرق هو إجراء الضغط على الزر , وبالأحمر إجراء إظهار قيمة x مضاف إليها 5

لو قمت بتنفيذ الكود السابق , ما الذي ينتج , ستقول ستظهر رسالة مكتوب عليها 15

سأقول لا , لا ليس صحيحاً , سينتج خطأ جسيم !!

السبب أن المتغير x معرف داخل الإجراء باللون الأزرق

وبالتالي فالمفروض أن نستخدمة في هذا الإجراء فقط , وإذا أستخدمناه في إجراء آخر كما فعلنا

فإن المعالج لن يتعرف على هذا المتغير !! .. ولكن ماذا لو أردنا أن نستخدم متغير في أكثر من إجراء؟؟

الجواب:

المتغيرات Variables تنقسم إلى نوعين رئيسيين :

1-متغيرات محلية Local وهي التي تعرف وتستخدم داخل الإجراء فقط

2-متغيرات عامة Global وهي التي تعرف خارج الإجراء وتستخدم من قبل إجراءات كثيرة

والمتغيرات العامة تنقسم إلى قسمين :

ِa- متغيرات خاصة private وهي تستخدم من قبل إجراءات ودوال النافذة الواحدة فقط ولا تراها النوافذ الأخرى

private int x;

b-متغيرات عامة public وهي تستخدم من قبل إجراءات ودوال النافذة والنوافذ الأخرى

public int x;

إذن إذا أردنا أن نستخدم متغير في عدة إجراءات فإننا نعرفة خارج الإجراء

والأفضل أن يكون تعريف المتغيرات العامة في بداية كود النافذة فوق دالة Main :

 //هنا تعريف المتغيرات الدولية
  [STAThread]
  public static void Main(string[] args)
  .
  .

وبالتالي فالإجراء السابق بعد التعديل سيصبح هكذا :

private int x;
  .
  .
  void Button1Click(object sender, System.EventArgs e)
  {
  x=10;
  AddFive();
  }

  void AddFive()
  {
  int y;
  y=5+x;
  MessageBox.Show(Convert.ToString(y));
  }

طبعاً بفرض أننا وضعنا تعريف المتغير x فوق دالة Main

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

ملاحظة: إذا أردنا أن نكتب تعليق في الشفرة أو ملاحظة بدون أن يقرأها المترجم

فإننا نكتب في بداية السطر // والمترجم لن يقرأ الكود التي تحول لونها إلى الأخظر كما فعلنا

في الكود السابق , أما إذا كانت الملاحظة من عدة أسطر ولا نريد أن نضيف // لكل سطر نتيجة الكسل أو ما شابه

فيكفي أن نكتب*/ في بداية الملاحظة و/* في نهاية الملاحظة :

int x;
  /* هذا السطر لن يقرأه المترجم
  وهذا السطر ايضا
  وهذا أيضاً*/
  MessageBox.......

..

تم تعديل هذه المشاركة بواسطة حماة النهضة في 28 أبريل 2007 في 20:09

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#23

ملحق 1 : تعقب الأخطاء Appendix 1 : Error Handling

كثيراً ما تحدث أخطاء في البرامج نتيجة تعامل المستخدم مع البرنامج ,

وبدون تعقب للأخطاء سيغلق البرنامج بمجرد أي خطأ , لذلك يجب على المبرمج

تعقب الأخطاء ليمنع من إغلاق البرنامج وليظهر رسالة للمستخدم بالخطأ

مثلاً في تطبيق الآله الحاسبة في الدرس الثاني ماذا لو أدخل المستخدم حرف بدل من رقم

بالتأكيد كائن التحويل Convert.ToInt32 سيطلق خطأ لأنه لن يستطيع تحويل حرف إلى رقم

الكود كان هكذا :

int x;
  int y;
  int z; 
 x=Convert.ToInt32(t1.Text); 
 y=Convert.ToInt32(t2.Text); 
 z=x+y;
  MessageBox.Show(Convert.ToString(z));

وعند إدخال حرف إلى مربع النص t1 أو t2 فستظهر رسالة خطأ ويتوقف البرنامج

لتعقب الأخطاء نستخدم جملة try و catch حيث نكتب الكود الذي يمكن أن يسبب خطأ

ضمن جملة try ونكتب الكود الذي ينفذ في حالة حدوث حطأ ضمن جملة catch

ويصبح الكود السابق هكذا:

 try
 { 
 int x;
 int y;
 int z;
 x=Convert.ToInt32(t1.Text);
 y=Convert.ToInt32(t2.Text);
 }
 catch 
 {
 MessageBox.Show("تأكد من إدخال أرقام فقط"); 
 }
 z=x+y; MessageBox.Show(Convert.ToString(z));

الكود باللون الأزرق هو مكان إحتمال وجود الخطأ لأنه المكان الذي يتم تحويل المدخلات إلى رقم

وإذا حصل إي خطأ فإن المعالج سينتقل لتنفيذ الكود باللون الأحمر

أما إذا لم يحدث أي خطأ , فالمعالج لن ينفذ الكود بالأحمر ..

ملحق 2 :إنهاء البرنامج Appendix 2 : Program Termination

لإنهاء البرنامج نحتاج إلى كائن يتعامل مع بيئة الدوت نت وهذه هي التعليمة :

System.Environment.Exit(0);

الكائن Environment يمثل بيئة الدوت نت الذي يعمل عليها البرنامج

والتعليمة Exit تجعل المعالج ينهي البرنامج ويفرغ الذاكرة Release Memory References

والمدخل 0 يعني إنهاء البرنامج تماماً و سنعرف فيما بعد مدخلات أخرى لهذه التعليمة

ملحق 3 : التعامل مع ملفات المشروع Appendix 3 :-Dealing with project files

في لغات البرمجة المشروع ليس ملف وحيد فقط ,

انما مجموعة من الملفات المترابطة مع بعضها بواسطة ملف المشروع

وعند فتح المشروع يجب فتح الملف الأساسي للمشروع وسيقوم هو آلياً

بتحميل جميع ملفات المشروع لبيئة التطوير :

image4-1.jpg

كما في الصورة فالملف الأساسي للمشروع هو بامتداد csproj

وإذا كان المشروع متعدد البرامج فالملف الأساسي هو بإمتداد sln

أما إذا كان المشروع برنامج واحد كما في مشروعنا فيمكن فتح أي منهما

وإذا أردت أن تنسخ المشروع فعليك نسخ المجلد بالكامل الذي يحتوي على جميع الملفات

ثم فتح المشروع بواسطة ملف المشروع الأساسي

يتبع التطبيق..

..

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#24

التطبيق

ربما تسائل الكثير عن وظيفة الملفات الكثيرة التي تنتهي بإمتداد dll

حان الوقت لنعرف ذلك , dll هي إختصار لـ Dynamic Link Library

هذه الملفات كتبت بلغة برمجة و تحتوي على دوال وإجرائات وكائنات

و تستخدم في برامج أخرى, مثلاً دالة إظهار رسالة كما إستخدمناها في الدروس السابقة

موجودة في ملف اسمة System.dll ينزل مع لغة البرمجة , وبدون هذا الملف

لن نستطيع إظهار الرسالة , حيث أن شفرة إظهار الرسالة ورسم صندوق الرسالة

ورسم زر موافق ورسم شريط العنوان كلها هذه الشفرة مكتوبة مسبقاً وموجود في الملف System.dll

ونحن ما علينا سوى إستدعائها من الملف كما نستدعي دالة أو إجراء عادي ,

وهناك دوال كثيرة أخري تتعلق بقواعد البيانات موجوده في الملف System.Data.dll

وهناك دوال الرسم موجوده في System.Drawing.dll ....

إي أن الدوال و الإجراءات والكائنات في لغات البرمجة مقسمة في ملفات بغرض تنظيمها

وعندما تريد إستخدام دالة في ملف محدد يجب أن تظيف هذا الملف إلى مشروعك

حتى يتعرف علية المعالج ويستطيع إستدعاء الدوال داخلة .

ربما تسأل كيف إستخدمنا دالة إظهار الراسالة في الدروس السابقة ولم نظيف ملف System.dll

الإجابة أن لغة البرمجة تضيف هذا الملف آلياً لأنه يحتوي على دوال كثيرة الإستخدام ومهمة

ولتعرف إن هذا الملف مضاف في المشروع :

image4-2.jpg

أفتح نافذة ملفات المشروع كما في رقم 1 ثم إفتح الملحقات References رقم 2

سترى مجموعة من الملفات مضافة للمشروع ومنها ملف System رقم 3

وفي بداية كود النافذة يجب إستدعاء الملف بإستخدام تعليمة using حتى يتم تحميل

جميع كائنات ودوال الملف ويتمكن المعالج من معرفتها وإستخدامها .

أحياناً ملف dll يحتوي على كائنات داخلة وداخل كل كائن دوال مختلفة

في هذه الحالة لن نستطيع إستدعاء الدالة كما فعلنا في دالة إظهار الرسالة

لأن المعالج لا يعرف مكان الدالة في الملف فهو يفحص الدوال الموجوده في الملف

ولكنه لا يفحص الكائنات , لذلك لا يجد الدوال المخزنة داخل كائنات

ويجب علينا أن نحدد عنوان الدالة داخل الملف ,

ويتم ذلك بكتابة إسم الكائن متبوعاً بنقطة ثم إسم الكائن الداخلي ... وهكذا حتى نصل إلى مكان الدالة

مثلاً دالة إنهاء البرنامج هي Exit , وهذه الدالة موجوده داخل كائن إسمة Environment

وهذا الكائن موجود داخل ملف System , فإذا إستدعينا هذه الدالة بإسمها فقط فإن المعالج لن يعرف عنوانها

ويظهر لنا خطأ , لذلك وجب علينا تحديد عنوانها هكذا :

System.Environment.Exit(0);

..

وبما أن تطبيقنا يشغل ملفات صوت وفيديو فيجب علينا إضافة الملفات التي يوجد فيها دوال الصوت والفيديو

ودوال الصوت والفيديو موجود في ملفي dll

وللأسف هذه الملفات لا ينزل مع لغة البرمجة

لذلك يجب تنزيلها

من هذا الرابط

بعد تنزيل الملفات وفك الضغط , إفتح المشروع وافتح نافذة ملفات المشرع

واضغط بالزر الأيمن على References وإختار Add Reference

image4-3.jpg

ستظهر لك هذه النافذة:

image4-4.jpg

إختر Browse من تبويب .Net Assemply ثم أضف ملف

Microsoft.DirectX.AudioVideoPlayback.dll

الذي قمت بتنزيله

حتى يظهر الملف في قائمة الملفات المختارة رقم 3 , ثم إختر OK

سترى أن الملف تم إضافتها إلى قائمة الملفات الملحقة :

image4-5.jpg

الآن في أعلى كود النافذة يجب إستدعاء الملف ليتعرف عليه المعالج وذلك بإضافة الكود:

using Microsoft.DirectX.AudioVideoPlayback;

يضاف هذا الكود أسفل تعليمات الإضافة الإفتراضية كما في الصورة :

image4-6.jpg

الآن إذهب إلى تصميم نافذة تطبيق الدرس السابق و قم بحذف القائمة l1

وعدل النص في الزر من "تشغيل الدوارة" إلى "فتح ملف الصوت"

إسحب زر آخر وأكتب عليه "تشغيل ملف الصوت"

ثم إسحب أداة OpenFileDialog إلى النافذة

image4-7.jpg

ستلاحظ أنها لن تضاف في النافذة وإنما في شريط أصفر تحت

وذلك لأن هذه الأداة لا تظهر على النافذة مثل الزر أو صندوق النص

الآن إختر الأداة من الشريط الأصفر و غير إسمها من openFileDialog1 إلى OF ليسهل التعامل معها من الكود

حتى يصبح شكل النافذة هكذا :

image4-8.jpg

الآن سنقوم بتعريف متغير من نوع مشغل صوت Audio, وهذا النوع موجود في ملف Microsoft.DirectX.AudioVideoPlayback

كنا نعرف متغير من نوع رقم هكذا :

int x;

وبنفس الطريقة سنعرف متغير"كائن" من نوع مشغل صوت

Audio ap;

عرفنا كائن أسمة ap من نوع Audio ..

لاحظ أن النوع Audio لا يعتبر متغير وإنما كائن لأنه يحتوي على أفعال وصفات ودوال كما سنرى

ولكن لاحظ أننا سنستخدم هذا الكائن في إجرائين إثنين , إجراء فتح الملف و إجراء تشغيل الملف

إذا في أي إجراء سنعرفه ؟؟ .... يجب أن يكون هذا المتغير متغر عام Global

لذلك يجب أن نعرفه خارج الإجرائين ونحدد هل هو عام لجميع النوافذ أم خاص لهذه النافذة

إبحث عن مكان في الشفرة خارج الإجرائين , والمفضل أن يكون كما حددته في الدرس

وقم بتعريف الكائن بهذا الكود :

private Audio ap;

بما اننا سنستخدمة في هذه النافذة فقط جعلنا نوعه خاص private :

image4-9.jpg

الآن افتح التصميم و اضغط مزدوجاً على زر "فتح ملف الصوت" لتذهب إلى الكود

إمسح الكود من الدرس السابق : وأضف هذا الكود :

OF.ShowDialog();
	ap=Audio.FromFile(OF.FileName);

أضغط مزدوجا على زر "تشغيل ملف الصوت" وأضف هذا الكود:

ap.Play();

في الكود الأول إستخدمنا دالة ShowDialog في أداة فتح الملفات OF لتظهر لنا نافذة لفتح ملف الصوت :

image4-10.jpg

هذة الدالة ترجع قيمة من نوع نص تحتوي على مسار الملف الذي إخترته

وفي السطر الثاني إستخدمنا دالة FromFile في كائن Audio لفتح الملف وتحميلة للمتغير ap

لاحظ أن الدالة FromFile تتطلب مدخل من نوع نص يحتوي على مسار الملف المراد تحميلة

ومسار هذا الملف هو القيمة التي سترجعها الدالة OF.FileName

في الكود الثاني إستخدمنا دالة Play في المتغير ap لتشغيل ملف الصوت

الآن قم بتشغيل البرنامج وإضغط على زر "فتح ملف الصوت"

وإختر ملف صوت من نوع mp3 أو wav , لا تختر ملف من نوع rm

سنعرف فيما بعد كبف نشغل ملفات rm و ram

بعد إختيار الملف اضغط على زر "تشغيل ملف الصوت"

واستمع للصوت الناتج من برنامجك

ملاحظة : بما ان التطبيق أستخدم دوال داخل ملف Microsoft.DirectX.AudioVideoPlayback

فانه عند تشغيل البرنامج سيقوم المعالج بنسخ هذا الملف إلى مسار البرنامج

ولن يعمل البرنامج إلا إذا كان هذا الملف إلى جانبه في نفس المجلد

الواجب

*ماذا لو إخترت ملفاً غير صوتياً وجربت تشغيلة

بالطبع سيظهر لك خطأ ويتوقف البرنامج , ما رأيك لو تعقبت هذا الخطأ

وأظهرت رسالة بالعربية تخبر المستخدم ما اللذي يجري .

تلميح : ظهر الخطأ سيكون عند تعليمة

كود:

ap.Play();

لذلك يجب وضع هذه التعليمة ضمن جملة try و ...

يمكن أيضاً ان يظهر خطأ عند تعليمة :

 ap=Audio.FromFile(OF.FileName);

وبالتلي فالأفضل وضعها ضمن جملة try أيضاً

*أضف زر لإنهاء البرنامج وأرسل التطبيق ..

ملاحظة مهمة:

ليعمل تطبيق الصوت في أنظمة لا تحتوي على DirectX SDK

يجب إرفاق ملف DirectX الذي قمت بتنزيله في مجلد التطبيق بجانب ملف البرنامج

بمعنى أن نضع هذا الملف بجانب ملف البرنامج exe كما في الصورة

image4-11.jpg

.نهاية الدرس الرابع.

..

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

#25

Pro_S00

اقتباس
نفذت خطواتك ولكن يعطيني خطأ في سطر pb.value+=step

ياليت تسوي التطبيق في البرنامج وترفقه هنا ..

هناك طريقة أخرى ربما تكون أسهل في التنفيذ:

قبل دوارة for حدد اعلى قيمة لكائن pb ولتكن عدد تكرار الدوارة +1 :

 pb.Maximum = 50 + 1;

وداخل حاصرتي الدوارة بعد جملة الشرط أضف كود التحريك لتحريك قيمة الكائن خطوة واحدة :

 pb.Value += 1;

..

7oma

حماة النهضة

إعذرونا , سنضطر للغياب فترة كبيرة

الأمر ليس بيدنا ...... فسامحونا

هذا الموضوع مغلق.

مواضيع مشابهة