نوشته شده توسط
perkas
شاید درست سوالمو مطرح نکردم
اولا میخوام زمانی که هنوز روش کلیک نکردم اطلاعات رو نشونم بده
دوما یه چیزای دیگه هم مد نظرم هست که به همین دلیل شکل نوشتن دستور بیشتر کمکم میکنه
مثلا به جای نمایش اطلاعات مربوطه کار دیگه ای انجام بده ( تعداد کارکترها رو نشون بده تو لیبل یا هر دستور دیگه ای )
میخوام که هر کاری که خواستم فقط اونجا که دستور نوشته رو تغییر بدم
در این مورد باید از رویداد 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 اندیس آیتم هایلایت شده هست که میتونید به آیتم دسترسی داشته باشید و براساس اون کوئری بزنید.