2010-11-17 17 views
7

Geçerli bir proje için, yanındaki renk resminin (dizgiler) yanında küçük bir örnek karesinin bulunduğu bir açılır menüye ihtiyacım vardı (resim). Böylece, bunu başarmak için özel bir ComboBox tasarlayabildim. Ancak, bir sorun yaşıyorum .... listeden bir öğe seçtiğimde, renk örneği görünmüyor, yalnızca rengin adı yok. öğeden sonraÖzel bir ComboBox İçinde Resim Çizme

alt text

seçilir:

Genişletilmiş Menu (aşağıdaki örneklere bakın) dizeleri yanında başlamak için renkleri çekmek için

alt text

, ben kullanılmış:

// Draws the items into the ColorSelector object 
    protected override void OnDrawItem(DrawItemEventArgs e) 
    { 
     e.DrawBackground(); 
     e.DrawFocusRectangle(); 

     DropDownItem item = (DropDownItem)Items[e.Index]; 
     // Draw the colored 16 x 16 square 
     e.Graphics.DrawImage(item.Image, e.Bounds.Left, e.Bounds.Top); 
     // Draw the value (in this case, the color name) 
     e.Graphics.DrawString(item.Value, e.Font, new 
       SolidBrush(e.ForeColor), e.Bounds.Left + item.Image.Width, e.Bounds.Top + 2); 

     base.OnDrawItem(e); 
    } 

Bir DropDownItem, görüntü ve çizilecek dizeyi içerir. Yani ... kimse bir öğe seçildiğinde, liste genişletildiğinde olduğu gibi ComboBox'ın görüntüyü ve dizgeyi çizmesini sağlamak için ne yapmam gerektiğini veya ne yapmam gerektiğini biliyor mu?

Çok teşekkürler; Şerefe! eğer yardımcı olur

cevap

7

Set DropDownStyleDropDownList için; Varsayılan olarak ComboBox, seçilen öğeyi görüntülemek için TextBox kullanır. Bu yüzden seçilen öğe açılır menüden farklı olarak görüntülenir.

+0

Mükemmel! Bu güzel çalışıyor! Çok teşekkür ederim. Kontrolün en üstte bir TextBox nesnesi kullandığı hakkında hiçbir fikrim yoktu; Bu ilginç (ve belirsiz) bir uygulama gibi görünüyor. – JToland

0

Ayrıca çalışması için OnPaint'i OnDrawItem yönteminize benzer şekilde geçersiz kılmanız gerekir.