2010-11-17 12 views
7

Do bieżącego projektu potrzebowałem menu rozwijanego z nazwami kolorów (ciągi) z małym przykładowym kwadratem koloru obok niego (zdjęcie). Tak więc udało mi się zaprojektować niestandardowy ComboBox, aby to osiągnąć. Mam jednak jeden problem .... kiedy wybieram element z listy, kolor nie pokazuje się, tylko nazwa koloru. (Patrz przykłady poniżej)Rysowanie obrazów wewnątrz niestandardowego ComboBox

rozwiniętym menu:

alt text

Po pozycji jest najważniejsze:

alt text

W celu wyciągnięcia kolory obok strun na początek, ja używany:

// 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); 
    } 

Gdzie DropDownItem zawierał obraz i ciąg do narysowania. Więc ... Czy ktoś wie, co muszę przesłonić lub co muszę zrobić, aby uzyskać ComboBox narysować obraz i ciąg zarówno tak, jak to już robi, gdy lista jest rozwinięta, gdy element jest wybrany?

Wielkie dzięki; Pozdrawiam!

Odpowiedz

7

Set DropDownStyle do DropDownList; domyślnie ComboBox używa TextBox, aby wyświetlić wybrany element. Dlatego wybrany element wyświetla się inaczej niż z rozwijanych pozycji.

+0

Idealny! Działa to pięknie! Dziękuję bardzo. Nie miałem pojęcia, że ​​kontrola po prostu używała obiektu TextBox na wierzchu; to wydaje się być ciekawą (i nieprzyzwoitą) implementacją. – JToland

0
+0

Ja naprawdę nie widzę nic, co robi autor tego artykułu, którego już nie robię ... Właściwie to popatrzyłem na niego więcej i jestem pewien, że jego rozwiązanie będzie miało ten sam problem już mam. Jeśli spojrzysz na pierwszy obraz w tym artykule, zobaczysz, że wybrany element nie ma w rzeczywistości koloru kwadratu/obrazu obok niego. – JToland

0

Musisz również zastąpić OnPaint w sposób podobny do metody OnDrawItem, aby to zadziałało.

Powiązane problemy