PDA

View Full Version : سوال: رویدادی برای highlight شدن گزینه های ComboBox با حرکت موس روی گزینه ها قبل از انتخاب یک آیتم



perkas
پنج شنبه 24 مرداد 1392, 00:54 صبح
سلام

فرض کنید یه کمبو باکس داریم که اطلاعاتش رو از یه تیبل میگیره

حالا میخوام وقتی روس اطلاعات اسکرول میکنیم اطلاعات مربوط به گزینه ای که در حالت سلکت هست رو نشون بده


مثلا اگر کمبو داره لیست کالاها رو بهمون نشون بده زمانی که با مکان نما به بالا و پائین لیست میریم رو نام هر کالا که قرار بگیریم اطلاعاتش رو تو یه لیبل نشونمون بده ( مثلا موجودی کالا )

مهرداد صفا
پنج شنبه 24 مرداد 1392, 01:22 صبح
با سلام.
فیلد مورد نظر را به عنوان ValueMember به ComboBOx معرفی کرده و در رویداد SelectedItemChanged مقدار Lable را برابر با Combo.SelectedValue قرار دهید.

perkas
جمعه 25 مرداد 1392, 19:23 عصر
اگه یه سمپل آپ کنین ممنون میشم

perkas
جمعه 25 مرداد 1392, 21:48 عصر
با سلام.
فیلد مورد نظر را به عنوان ValueMember به ComboBOx معرفی کرده و در رویداد SelectedItemChanged مقدار Lable را برابر با Combo.SelectedValue قرار دهید.

دستور من اینشکلیه
چطور باید به شکلی که شما میگین بنویسمش

{
var db = newmydataDataContext();//linq class
var q = db.reza111s ;//linq query
user_list.Items.Clear();
foreach (var t in q)
{
user_list.Items.Add(t.fn);
}
}

Mahmoud.Afrad
جمعه 25 مرداد 1392, 22:13 عصر
چرا حلقه. از دیتاسورس استفاده کنید.

در این تاپیک (http://barnamenevis.org/showthread.php?393855-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-comboBox-%D9%87%D8%A7-%D8%A8%D8%A7-%D9%87%D9%85&p=1747477&viewfull=1#post1747477) کد و پروژه نمونه هست. اگر مشکلی بود توی همون تاپیک پیگیری کن.

perkas
جمعه 25 مرداد 1392, 22:42 عصر
چرا حلقه. از دیتاسورس استفاده کنید.

در این تاپیک (http://barnamenevis.org/showthread.php?393855-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-comboBox-%D9%87%D8%A7-%D8%A8%D8%A7-%D9%87%D9%85&p=1747477&viewfull=1#post1747477) کد و پروژه نمونه هست. اگر مشکلی بود توی همون تاپیک پیگیری کن.

این تاپیک با اون چیزی که میخوام مغایرت داره

perkas
جمعه 25 مرداد 1392, 23:32 عصر
شاید درست سوالمو مطرح نکردم

اولا میخوام زمانی که هنوز روش کلیک نکردم اطلاعات رو نشونم بده
دوما یه چیزای دیگه هم مد نظرم هست که به همین دلیل شکل نوشتن دستور بیشتر کمکم میکنه
مثلا به جای نمایش اطلاعات مربوطه کار دیگه ای انجام بده ( تعداد کارکترها رو نشون بده تو لیبل یا هر دستور دیگه ای )

میخوام که هر کاری که خواستم فقط اونجا که دستور نوشته رو تغییر بدم

Mahmoud.Afrad
شنبه 26 مرداد 1392, 00:34 صبح
شاید درست سوالمو مطرح نکردم

اولا میخوام زمانی که هنوز روش کلیک نکردم اطلاعات رو نشونم بده
دوما یه چیزای دیگه هم مد نظرم هست که به همین دلیل شکل نوشتن دستور بیشتر کمکم میکنه
مثلا به جای نمایش اطلاعات مربوطه کار دیگه ای انجام بده ( تعداد کارکترها رو نشون بده تو لیبل یا هر دستور دیگه ای )

میخوام که هر کاری که خواستم فقط اونجا که دستور نوشته رو تغییر بدم
در این مورد باید از رویداد DrawItem کمک بگیرید و توی اون هایلایت شدن رو چک کنید. البته راه بهتر ایجاد یک کلاس مشتق هست که در اون ایجاد یک پراپرتی جدید ، یک رویداد جدید و بازنویسی متد OnDrawItem راه حل منطفی تری هست. در اینصورت از رویداد مورد نظر و پراپرتی تعریف شده میتونید استفاده کنید.

class CustomComboBox : ComboBox
{
public int HighlightedIndex { get; set; }

public delegate void MyEventHandler(object sender, EventArgs e);

public event MyEventHandler HighlightedIndexChanged = null;

public CustomComboBox()
{
this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
}

protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem(e);

if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
this.HighlightedIndex = e.Index;
OnHighlightedIndexChanged(new EventArgs());
}

e.DrawBackground();
SolidBrush brush = new SolidBrush(e.ForeColor);
e.Graphics.DrawString(this.Items[e.Index].ToString(), e.Font, brush, new Point(e.Bounds.X, e.Bounds.Y));
}

protected virtual void OnHighlightedIndexChanged(EventArgs e)
{
if (HighlightedIndexChanged != null)
{
HighlightedIndexChanged(this, e);
}
}
}

در رویداد HighlightedIndexChanged مقدار HighlightedIndex اندیس آیتم هایلایت شده هست که میتونید به آیتم دسترسی داشته باشید و براساس اون کوئری بزنید.