السلام عليكم ورحمة الله وبركاته
لدي ListBox وفيها مجموعة من الأسماء ، كيف يمكن تلوين عدد من هذه الأسماء بحيث يتوافق مع شرط معين ، بمعنى لو
كان الأسم samir يكون لون الأسم أخضر ولو كان الأسم monir يكون لون الأسم الاحمر وهكذا...
شكراً مقدماً
لتلوين عناصر محددة في ListBox وفقًا لشرط معين، يمكنك استخدام حدث DrawItem لتعديل الرسم التوضيحي لكل عنصر في ListBox. كيف يمكن تحقيق ذلك في C#:
قم بتعيين DrawMode لـ OwnerDrawFixed في ListBox.
قم بتعريف حدث DrawItem للقيام برسم العناصر بشكل مخصص.
قد يبدو الكود كما يلي:
csharp
Copy code
private void listBox1_DrawItem(object sender, DrawItemEventArgs e)
{
// افحص العنصر الحالي
if (e.Index >= 0)
{
string currentItem = listBox1.Items[e.Index].ToString();
// قم بتحديد اللون وفقًا للشرط المحدد
Color itemColor = GetItemColor(currentItem);
// رسم النص باللون المحدد
using (Brush brush = new SolidBrush(itemColor))
{
e.Graphics.DrawString(currentItem, e.Font, brush, e.Bounds, StringFormat.GenericDefault);
}
}
}
// تحديد لون كل عنصر بناءً على شرط معين
private Color GetItemColor(string itemName)
{
// ضع هنا الشروط والألوان المطلوبة
if (itemName.Equals("samir", StringComparison.OrdinalIgnoreCase))
{
return Color.Green;
}
else if (itemName.Equals("monir", StringComparison.OrdinalIgnoreCase))
{
return Color.Red;
}
// إذا لم يتوافق الشرط مع أي قاعدة، فقم بتحديد لون افتراضي
return SystemColors.WindowText;
}
تأكد من ربط حدث DrawItem مع الدالة listBox1_DrawItem:
csharp
Copy code
private void Form1_Load(object sender, EventArgs e)
{
// ربط حدث DrawItem مع الدالة listBox1_DrawItem
listBox1.DrawMode = DrawMode.OwnerDrawFixed;
listBox1.DrawItem += new DrawItemEventHandler(listBox1_DrawItem);
// إضافة بعض الأسماء لـ ListBox للتجربة
listBox1.Items.Add("samir");
listBox1.Items.Add("monir");
listBox1.Items.Add("john");
listBox1.Items.Add("doe");
}
يمكنك تخصيص الشرط والألوان وفقًا لاحتياجاتك الخاصة.