مرحبا بكم فى موقعكم التعليمى مفيدا ومستفيدا

الدرس الحادى عشر - المتغيرات العامة public

اذهب الى الأسفل

الدرس الحادى عشر - المتغيرات العامة public

مُساهمة من طرف sayed في السبت أكتوبر 29, 2011 1:31 am

المتغيرات العامة public
إلى الآن ما زال برنامجنا يحتوي على نافذة واحدة فقط , لذلك لم نجد الفرصة لإستخدام المتغرات العامة
في درس اليوم سنقوم بإضافة نافذة جديدة إلى البرنامج لإدارة الألبومات "قوائم التشغيل"
حيث سنحتاج للوصول إلى متغيرات النافذة الأساسية من نافذة الالبومات
المتغير الأساسي الذي سنحتاج للوصول إليه من نافذة الالبومات هو قائمة التشغيل albume
حيث يجب تمريرها إلى نافذة الألبومات حتى يتم إجراء التعديلات عليها
وهنا يجب إستخدام كلمة public قبل تعريف albume حتى تستطيع النافذة الأخرى التعرف عليها كما سنرى في التطبيق
التطبيق:

إفتح تطبيق الدرس السابق وإذهب إلى نافذة Project وأنقر بزر الفارة الأيمن على إسم البرنامج MyMediaPlayer
ومن القائمة إختر Add ثم New Item

ستظهر لك القائمة التالية :

إختر C# ثم Windows Application ثم Form وأكتب في حقل إسم الفورم albumes.cs
ثم انقر على زر Create لكي يتم إنشاء نافذة جديدة في المشروع
يتم التنقل عبر نوافذ البرنامج من خلال النقر المزدوج على ملف النافذة في نافذة Projects

أنتقل إلى تصميم النافذة الجديدة , ومن صندوق الأدوات قم بسحب كائن المستعرض List View إلى النافذة الجديدة

قم بإختيار كائن المستعرض وإذهب إلى جدول الخصائص
غير الخاصية (Name) إلى lv
وغير الخاصية View إلى Details
إذهب إلى خاصية Columns وأنقر على زر التفاصيل :

ستظهر نافذة التفاصيل فارغة
هذه هي النافذة التي يتم من خلالها إنشاء أعمده لكائن المستعرض

حيث سنكون عمودين , عمود لإسم الملف فقط , وعمود آخر لمسار الملف كاملاً
أنقر على زر Add وغير خاصية Text إلى "إسم الملف"
ونقر مرة أخرى على زر Add لتنشئ العمود الثاني وغير خاصية Text فيه إلى "مسار الملف"
ثم انقر على زر الموافقة سيتكون في كائن المستعرض عمودين :

من صندوق الأدوات إسحب أربعة أزرار إلى يمين كائن المستعرض , وغير خاصية Text إلى
إضافة
إلى الأعلى
إلى الأسفل
حذف
إسحب زرين آخرين من صندوق الأدوات إلى أسفل كائن المستعرض وغير خاصية Text إلى
موافق
إلغاء الأمر
بحيث يصبح شكل النافذة هكذا :

إختر زر "موافق" وإذهب إلى جدول الخصائص وغير الخاصية DialogResult إلى OK
معنى هذا أنه عند النقر على هذا الزر فإن نتيجة النا فذة هي الموافق كما سنشرح لاحقاً
ثم إختر زر "إلغاء الأمر" وغير خاصية DialogResult إلى Cancel
وهذا يعني أنه عند النقر على هذا الزر فإن نتيجة النافذة هي إلغاء الأمر
من صندوق الأدوات إسحب كائن فتح الملفات و إختره وغير خاصية (Name) إلى OF
وغير خاصية MultiSelect إلى true
إنتقل إلى شفرة النافذة , نحتاج لتعريف متغير من نوع قائمة شبيهه بقائمة albume في النافذة الرئيسية
حتى يتم من خلالها التعامل مع الملف وإضافتها إلى كائن المتصفح و حذفها منه
وكما شرحنا سابقاً فإن كائن القائمة موجود في فضاء الأسماء System.Collections.Generic لذلك يجب إضافة عبارة using لتضمين كائنات ودوال الفضاء
إذهب إلى شفرة النافذة وأضف عبارة using التالية تحت عبارات using الموجوده في رأس الصفحة :

كود:
using System.Collections.Generic;

ثم أكتب كود تعريف القائمة تحت تعريف كائن النافذة :

كود:
public List albume=new List();


لاحظ أنا إستخدمنا الكلمة public وليس private وذلك حتى تتمكن النافذة الرئيسية من رؤية هذا المتغير كما سنرى لاحقاً
القائمة albume في نافذة الألبومات ستكون نسخة مطابقة للقائمة albume في النافذة الرئيسية
ويتم التعامل مع كائن المستعرض من خلال عناصر هذه القائمة .
إضافة ملفات
إنتقل إلى تصميم نافذة الالبومات وأنقر مزدوجا على زر "إضافة" للذهاب إلى شفرته
أكتب الكود التالي بين الحاصرتين :

كود:
OF.ShowDialog();
albume.AddRange(OF.FileNames);
FillView();


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

كود:
void FillView()
{
lv.Items.Clear();
for (int i = 0; i < albume.Count; i++)
{
string filename=System.IO.Path.GetFileName(albume[i]);
ListViewItem file = new ListViewItem(filename);
file.SubItems.Add(albume[i]);
lv.Items.Add(file);
}
}


فس السطر الثالث قمنا قمنا بإستدعاء دالة تنظيف كائن المستعرض lv.Items.Clear
حيث تقوم هذه الدالة بتنظيف كائن المستعرض من أي عناصر موجوده مسبقاً حتى يتم إضافة العناصر الجديدة
في السطر الرابع دوارة for من الصفر وحتى عدد عناصر القائمة albume التي تحمل مسارات الملفات المختارة
في السطر السادس قمنا بتعريف متغير من نوع نص يحمل ناتج دالة GetFileName والتي ترجع إسم الملف من المسار الموجود في قائمة albume في الترتيب i
في السطر السابع عرفنا كائن جديد إسمه file من نوع ListViewItem
حيث ان كائن المستعرض lv هو عبارة عن مجموعة كائنات ListViewItem حيث يمثل كل كائن منها سطر واحد من سطور كائن المستعرض
ولأن ListViewItem كائن وليس متغير فقد إستخدمنا الجملة new ومررنا له إسم الملف الناتج من السطر السابق
حيث أصبح المتغير يحمل قيمة filename من السطر السابق
وفي السطر الثامن , أضفنا كائن فرعي للكائن file من خلال الدالة file.SubItems.Add
ومررنا لها العنصر الذي ترتيبه i من قائمة albume
الآن المتغير file أصبح يحمل قيمتين الأولى هي إسم الملف والثانية الفرعية هي مسارة المخزن في قائمة albume
في السطر التاسع أضفنا الكائن file إلى lv حيث يعتبر سطر واحد من سطور كائن المستعرض lv
وبعد تكرار هذه العملية لكافة عناصر القائمة albume يصبح الكائن lv محتوياً على جدول يوضح جميع أسماء ومسارات الملفات المختارة
حذف ملف
إذهب إلى تصميم نافذة الألبومات وأنقر مزدوجاً على زر "حذف" لتنتقل إلى شفرته
أكتب الكود التالي بين الحاصرتين :

كود:
albume.RemoveAt(lv.SelectedIndices[0]);
FillView();


الدالة RemoveAt تقوم بأخذ ترتيب العنصر كمدخل وتحذفة من القائمة
فمثلاً لو أردنا حذف العنصر الذي ترتيبة 4 سيكون الكود كالتالي :

كود:
albume.RemoveAt(4);

لاحظ أن العنصر الذي ترتيبه 4 هو العنصر الخامس
الدالة SelectedIndices من دوال الكائن lv تقوم بإرجاع مصفوفة تحتوي على ترتيبات الأسطر المختارة في الكائن
فمثلاً لو أخترنا السطر الثالث و الرابع من القائمة سترجع الداله مصفوفة تحتوي رقمي 2 و 3
لاحظ , أن السطر الثالثة ترتيبة 2 وليش 3 كما شرحنا مراراً.
لكنا نريد عند النقر على زر الحذف أن يقوم البرنامج بحذف سطر واحد, وهو أول سطر من السطور المختارة

كود:
lv.SelectedIndices[0]

وفي السطر الثاني نقوم بإستدعاء الإجراء FillView والذي يقوم بنسخ محتويات القائمة albume إلى الكائن lv
ماذا لو تم النقر على زر الحذف وليس هناك أسطر مختارة من قبل المستخدم ,
سيظهر خطأ عندها , ولحل هذا الخطأ يجب أولاً فحص عدد العناصر المختارة فإذا كان أكبر من صفر
فذلك يعني أن هناك ملفات مختارة و بالتالي ينفذ كود الحذف ,
عدل الكود السابق حتى يصبح هكذا :

كود:
if(lv.SelectedIndices.Count>0)
{
albume.RemoveAt(lv.SelectedIndices[0]);
FillView();
}


يتم فحص عدد العناصر المختارة من خلال الخاصية lv.SelectedIndices.Count
تابع التطبيق في الرد التالي..
avatar
sayed
Admin

عدد المساهمات : 190
تاريخ التسجيل : 10/10/2011
العمر : 62
الموقع : computer.hooxs.com

http://computer.hooxs.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى