PDA

View Full Version : سوال: رنگی کردن یک آیتم خاص در ComboBox



samandario
سه شنبه 28 مهر 1394, 14:08 عصر
با سلام

من کمبو باکسی دارم که لیست اونرو بطور کدنویسی پر کرده ام. حالا می خوام که مثلا" آیتم 5 ام از لیست رنگ آبی داشته باشه و پس از انتخاب هم آبی بمونه. در ضمن این کمبو باکی DropDownList است.

لطفا"راهنمایی بفرمایید

ممنون

am_al_59
سه شنبه 28 مهر 1394, 16:26 عصر
شما باید در هنگام رویداد DrawItem کمبوباکست عملیات رنگی کردن آیتم هارو انجام بدی
کد زیر نمونه هست که بر اساس ترتیب قرار گیری آیتم هارو رنگی میکنه


comboBox1.DrawItem += ComboBox1_DrawItem;

private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
return;
Brush brush;
if (e.Index == 1)
brush = Brushes.Red;
else if (e.Index == 2)
brush = Brushes.Green;
else if (e.Index == 3)
brush = Brushes.Blue;
else if (e.Index == 4)
brush = Brushes.Yellow;
else
brush = Brushes.Cyan;
e.Graphics.DrawString(((ComboBox)sender).Items[e.Index].ToString(), ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y);
}

برای اینکه این رویداد در زمان کشیده شدن اتفاق بیفته خاصیت DrawMode رو هم از حالت نرمال بزار روی یکی از دوحالت دیگه

samandario
سه شنبه 28 مهر 1394, 21:48 عصر
شما باید در هنگام رویداد DrawItem کمبوباکست عملیات رنگی کردن آیتم هارو انجام بدی
کد زیر نمونه هست که بر اساس ترتیب قرار گیری آیتم هارو رنگی میکنه


comboBox1.DrawItem += ComboBox1_DrawItem;

private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index < 0)
return;
Brush brush;
if (e.Index == 1)
brush = Brushes.Red;
else if (e.Index == 2)
brush = Brushes.Green;
else if (e.Index == 3)
brush = Brushes.Blue;
else if (e.Index == 4)
brush = Brushes.Yellow;
else
brush = Brushes.Cyan;
e.Graphics.DrawString(((ComboBox)sender).Items[e.Index].ToString(), ((Control)sender).Font, brush, e.Bounds.X, e.Bounds.Y);
}

برای اینکه این رویداد در زمان کشیده شدن اتفاق بیفته خاصیت DrawMode رو هم از حالت نرمال بزار روی یکی از دوحالت دیگه


ممنون از شما . اما با وارد کردن کد برنامه هنگ میکنه!!!!

am_al_59
سه شنبه 28 مهر 1394, 23:01 عصر
من تست کردم و شد

یک پروژه نمونه جدا از پروژه خودت درست کن یک فرم ایجاد کن و در داخلش یک combobox
اونوقت دستوراتی که گفتم رو بزن و مقادیر رو تنظیم کن حتماً جایی داری اشتباه میکنی
اگر حل نشد همون پروژه نموه که درست کردی رو بزار

samandario
جمعه 01 آبان 1394, 22:26 عصر
من تست کردم و شد

یک پروژه نمونه جدا از پروژه خودت درست کن یک فرم ایجاد کن و در داخلش یک combobox
اونوقت دستوراتی که گفتم رو بزن و مقادیر رو تنظیم کن حتماً جایی داری اشتباه میکنی
اگر حل نشد همون پروژه نموه که درست کردی رو بزار



ممنون دوست عزيز. برنامه درست جواب داد.
حالا يك سوال ديگه...من چند comboBox دارم كه با كدنويسي اونها رو پر مي كنم . مي خوام اگر آيتم نوشته شده در
comboBox جزء آيتم هاي موجود باشه رنگش مثلا" قرمز بشه . كد زير رو نوشتم اما بعد از باز شدن comboBox عمل مي كنه يعني با باز شدن صفحه براي بار اول رنگي نميشه.اميدوارم متوجه منظورم شده باشيد.


string b = combo10.Text;



for (int i = 0; i < combo10.Items.Count; i++)
{
string value = combo10.GetItemText(combo10.Items[i]);

if (b== value)
{
combo10.ForeColor = Color.Red;
}

}

am_al_59
جمعه 01 آبان 1394, 22:53 عصر
این کدهارو شما کجا میزنی؟
توی سازنده فرم میزنی؟
توی فرم لود میزنی؟
توی همون رویداد DrawItem میزنی؟ آیتم هاتو شما کجا ادد میکنی؟
این مشکل آخر شما بستگی به روال اجرای متدها داره... اگر کد اصلی شما زیاده بهتره یک فرم نمونه ساده درست کنی و با یک کمبوباکس و آیتم های نمونه تست کنی اگر جواب نگرفتی همون کد نمونه رو بزار با هم ببینیم مشکل کجاست