ListBox هو ItemsControl ،
مما يعني أنه يمكن أن يحتوي على مجموعة من الكائنات من أي نوع (مثل السلسلة أو الصورة أو panel)
مما يعني أنه يمكن أن يحتوي على مجموعة من الكائنات من أي نوع (مثل السلسلة أو الصورة أو panel)
يمكن رؤية أكثر من عنصر واحد في ListBox ، على عكس ComboBox ، الذي يحتوي على العنصر المحدد
فقط المرئي
تحدد الخاصية SelectionMode إمكانية تحديد أكثر من عنصر واحد في ListBox في المرة الواحدة.
تحدد الخاصية SelectionMode عدد العناصر التي يمكن للمستخدم تحديدها في وقت
واحد. يمكنك تعيين الخاصية إلى one
(الافتراضي) أو متعدد (MultiSimple)
أو ممتد.( MultiExtended)
إنشاء ListBox
هناك طريقتان لإنشاء اداة تحكم ListBox في نماذج Windows. إما أنه يمكننا استخدام مصمم النماذج لإنشاء
اداة تحكم في وقت التصميم أو يمكننا استخدام فئة ListBox لإنشاء اداة تحكم في وقت التشغيل.
إنشاء ListBox في وقت التصميم
في شرحنا الأول ، سنقوم بإنشاء اداة تحكم ListBox في وقت التصميم باستخدام مصمم النماذج.
لإنشاء اداة تحكم ListBox في وقت التصميم ، نقوم ببساطة بسحب اداة تحكم ListBox من Toolbox وإسقاطه إلى نموذج في Visual Studio. بعد سحب ListBox وإسقاطه في نموذج ، يبدو ListBox كما في الشكل 1. بمجرد وجود ListBox في النموذج ، يمكنك تحريكه وتغيير حجمه باستخدام الماوس وتعيين خصائصه وأحداثه
في شرحنا الأول ، سنقوم بإنشاء اداة تحكم ListBox في وقت التصميم باستخدام مصمم النماذج.
لإنشاء اداة تحكم ListBox في وقت التصميم ، نقوم ببساطة بسحب اداة تحكم ListBox من Toolbox وإسقاطه إلى نموذج في Visual Studio. بعد سحب ListBox وإسقاطه في نموذج ، يبدو ListBox كما في الشكل 1. بمجرد وجود ListBox في النموذج ، يمكنك تحريكه وتغيير حجمه باستخدام الماوس وتعيين خصائصه وأحداثه
الطريقة الثانية لانشاء أداة االتحكم ListBox (برمجياً)
نقوم بإنشاء اوبجكت من الفئة ListBox وتعيين خصائص الأداة ومن ثم نضيف الأداة للفورم
ListBox
listBox1 = new ListBox();
في الخطوة التالية ، يمكنك تعيين خصائص اداة تحكم ListBox.
يقوم مقتطف الكود التالي بتعيين خصائص الموقع والعرض والارتفاع ولون الخلفية ولون المقدمة
والنص والاسم والخط في ListBox:
listBox1.Location
= new System.Drawing.Point(12, 12);
listBox1.Name = "ListBox1";
listBox1.Size = new System.Drawing.Size(245, 200);
listBox1.BackColor =
System.Drawing.Color.Orange;
listBox1.ForeColor = System.Drawing.Color.Black;
بمجرد أن يصبح اداة التحكم ListBox جاهزًا بخصائصه ، فإن الخطوة التالية هي إضافة ListBox إلى الفورم. للقيام بذلك ، نستخدم الأسلوب this.Controls.Add الذي يضيف اداة تحكم ListBox إلى عناصر تحكم الفورم ويعرضه
في الفورم بناءً على موقع اداة التحكم وحجمه. يضيف مقتطف التعليمة البرمجية التالية
اداة تحكم ListBox إلى الفورم الحالي:
this.Controls.Add(listBox1);
خصائص ListBox
أسهل طريقة لتعيين الخصائص هي من نافذة الخصائص. يمكنك فتح نافذة الخصائص بالضغط على F4 أو بالنقر بزر الماوس الأيمن على عنصر تحكم
واختيار عنصر القائمة "خصائص". تبدو نافذة الخصائص كما في الشكل 2
· خاصية Name
تمثل الخاصية Name اسمًا فريدًا لعنصر تحكم ListBox. يتم استخدامه للوصول إلى عنصر التحكم في
التعليمات البرمجية. يقوم مقتطف الرمز التالي بتعيين اسم عنصر التحكم ListBox ونصه
listBox1.Name =
"ListBox1";
·
خصائص الموقع والحجم Location and
Size
تأخذ خاصية الموقع نقطة تحدد موضع بدء ListBox في الفورم. يمكنك أيضًا استخدام الخاصيتين Left و Top لتحديد موقع عنصر التحكم من
الزاوية العلوية اليسرى من الفورم. تحدد الخاصية Size حجم عنصر التحكم. يمكننا أيضًا استخدام خصائص العرض والارتفاع
بدلاً من خاصية الحجم. يقوم مقتطف الكود التالي بتعيين خصائص الموقع والعرض والارتفاع لاداة تحكم ListBox:
listBox1.Location
= new System.Drawing.Point(12, 12);
listBox1.Size = new
System.Drawing.Size(245, 200);
· الخاصية Font
تمثل الخاصية Font خط نص اداة تحكم ListBox. إذا قمت بالنقر
فوق خاصية الخط في نافذة الخصائص ، فسترى اسم الخط وحجمه وخيارات الخط الأخرى. يقوم
مقتطف الكود التالي بتعيين خاصية الخط في وقت التشغيل:
listBox1.Font = new Font("Georgia", 16);
· الخاصية Items
يتم استخدام خاصية العناصر لإضافة العناصر
والعمل بها في ListBox. يمكننا إضافة عناصر إلى ListBox في وقت التصميم من نافذة الخصائص بالنقر على مجموعة العناصر كما ترى في الشكل
عندما تنقر على Collection ،
ستظهر لك نافذة محرر مجموعة السلسلة حيث يمكنك كتابة السلاسل النصية
سيصبح كل سطر تمت إضافته إلى هذه المجموعة عنصر ListBox. أضفت أربعة عناصر كما ترى من الشكل
بعد ان تقوم بإضافة العناصر سوف تبدو أداة ListBox
في الفورم بهذا الشكل
يمكنك إضافة بعض العناصر للListBox
في وقت التشغيل
مثال الكود التالي
listBox1.Items.Add("C#");
listBox1.Items.Add("C++");
listBox1.Items.Add("JAVA");
listBox1.Items.Add("PYTHON");
إحضار كافة عناصر ListBox
للحصول على جميع العناصر ، نستخدم خاصية العناصر وننتقل خلالها لقراءة جميع العناصر. يتكرر مقتطف الكود التالي عبر جميع العناصر ويضيف محتويات العنصر إلى StringBuilder ويعرضها في MessageBox:
للحصول على جميع العناصر ، نستخدم خاصية العناصر وننتقل خلالها لقراءة جميع العناصر. يتكرر مقتطف الكود التالي عبر جميع العناصر ويضيف محتويات العنصر إلى StringBuilder ويعرضها في MessageBox:
private void
button1_Click(object sender,
EventArgs e)
{
StringBuilder str = new StringBuilder();
foreach (var item in listBox1.Items)
{
str.Append(item.ToString());
str.Append(" ");}
MessageBox.Show(str.ToString());}
يمكنك الحصول على قيمة عنصر من عناصر listbox
واسنادها لمتغير اخر
مثال :
private void
button1_Click(object sender, EventArgs e)
{
listBox1.SelectedIndex = 2;
string str =
listBox1.Items[listBox1.SelectedIndex].ToString();
MessageBox.Show(str);
}
استخدمنا في السطر الأول داخل الدالة الخاصية SelectedIndex
لتحديد عنصر من عناصر listbox سوف يتم تحديد العنصر 3
وبعد ذلك يتم اسناد العنصر المحدد للمتغير str ومن ثم يقوم بطباعته
يمكنك حذف السطر الأول وتحديد عنصر في السطر الثاني
كالتالي :
string
str = listBox1.Items[listBox1.SelectedIndex=2].ToString();
· الخاصية SelectionMode
تحدد الخاصية SelectionMode كيفية تحديد العناصر في ListBox. يمكن أن تكون قيمة SelectionMode واحدة من قيم تعداد SelectionMode الأربع التالية:
لا شيء: لا يمكن تحديد عنصر.
واحد: يمكن تحديد عنصر واحد فقط.
MultiSimple: يمكن تحديد عناصر متعددة.
MultiExtended: يمكن تحديد عناصر متعددة ، ويمكن للمستخدم استخدام مفاتيح SHIFT و CTRL والسهم لإجراء التحديدات
لا شيء: لا يمكن تحديد عنصر.
واحد: يمكن تحديد عنصر واحد فقط.
MultiSimple: يمكن تحديد عناصر متعددة.
MultiExtended: يمكن تحديد عناصر متعددة ، ويمكن للمستخدم استخدام مفاتيح SHIFT و CTRL والسهم لإجراء التحديدات
لتحديد عنصر في ListBox ، يمكننا استخدام الدالة SetSelect التي تأخذ فهرس عنصر وقيمة صواب أو خطأ حيث تمثل
القيمة الحقيقية العنصر الذي سيتم تحديده.
يقوم مقتطف الكود التالي بتعيين ListBox للسماح بتحديد متعدد وتحديد العنصرين الثاني
والثالث في القائمة:
listBox1.SelectionMode = SelectionMode.MultiSimple;
listBox1.SetSelected(1, true);
listBox1.SetSelected(2, true);
يمكننا مسح جميع العناصر
المحددة عن طريق استدعاء طريقة ClearSelected ، كما في الكود التالي:
listBox1.ClearSelected();
ويمكن حذف جميع عناصر listBox كما في الكود التالي
listBox1.Items.Clear();
كيفية تعطيل تحديد العنصر
في ListBox؟
فقط قم بتعيين الخاصية
SelectionMode إلى none
فرز عناصر ListBox
إذا تم تعيين الخاصية Sorted إلى true ، فسيتم فرز عناصر ListBox.
يقوم مقتطف الكود التالي بفرز عناصر ListBox:
listBox1.Sorted = true;
البحث عن عناصر في ListBox
يتم استخدام الدال FindString للعثور على سلسلة أو سلسلة فرعية في ListBox.
يعثر مقتطف الكود التالي على سلسلة في ListBox ويحددها إذا تم العثور عليها:
private void
button1_Click(object sender,
EventArgs e)
{
listBox1.ClearSelected();
int index = listBox1.FindString(textBox1.Text);
if (index < 0)
{
MessageBox.Show("Item not found.");
}
else
{
listBox1.SelectedIndex = index;
}
}
ListBox SelectedIndexChanged Event Hander
يتم تشغيل الحدث SelectedIndexChanged عند تغيير تحديد العنصر في ListBox.
يمكنك إضافة معالج الأحداث باستخدام نافذة الاحداث واختيار رمز الحدث والنقر المزدوج
على SelectedIndexChanged
يحدد مقتطف الكود التالي
هذه الأحداث وينفذها ومعالجات الأحداث الخاصة بها. يمكنك استخدام هذا الرمز نفسه لتنفيذ
حدث في وقت التشغيل.
listBox1.SelectedIndexChanged += new EventHandler(listBox1_SelectedIndexChanged);
private void
listBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
MessageBox.Show(listBox1.SelectedItem.ToString());
}
الخاصية DataSource
يتم استخدام الخاصية DataSource لربط مجموعة من العناصر ListBox.
مقتطف الكود التالي هو مثال بسيط لربط البيانات حيث يرتبط Array String بقائمة ListBox
مقتطف الكود التالي هو مثال بسيط لربط البيانات حيث يرتبط Array String بقائمة ListBox
listBox1.Items.Clear();
string[] str = new string[]
{
"C","Ruby","PHP","Java Script"
};
listBox1.DataSource = str;



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