Różne kolory czcionki różnych itemów w ComboBox.

0

Witam,
Piszę aplikację w której użytkownik będzie się musiał zmierzyć z wyborem jakiejś opcji w ComboBox'ie. Dokładnie chodzi o wybranie nazwiska osoby, najbardziej odpowiedniej do jakiegoś zadania. Mój program, analizując bazę danych jest wstanie wymienić osoby najbardziej odpowiednie, trochę mniej i te najmniej odpowiednie do owego zadania. A skoro wszystkie te osoby będą do wyboru z ComboBoxa, ja chciał bym jakoś zakolorować te bardziej i mniej odpowiednie(np. pierwsze 3 zielone, następne czerwone). Ma ktoś może jakiś pomysł jak pokolorować(czcionka lub tło) itemy w ComboBox'ie na różne kolory? Szukałem na googlu i dowiedziałem się, że event OnDraw(czy jakoś tak) powinienem do tego wykorzystać, ale to wciąż za mało. Przydał by się jakiś przykład lub dokładniejszy opis. Bardzo proszę o pomoc. Z góry dziękuję, Pozdrawiam.

1

Będziesz musiał sobie je sam pokolorować :/
Obsłuż zdarzenie DrawItem

EDIT: właściwie to nie planowałem pisać więcej, no ale skoro ktoś się wreszcie wysilił i odpalił google przed zadaniem pytania...:

private void comboboxPaint(DrawItemEventArgs e, object sender)
{
    Rectangle r = e.Bounds;
    string s = combobox.Items[e.Index].ToString();
    Color c = WyliczaszKolor();
    e.Graphics.DrawString(/*parametry, sam wiesz najlepiej jakie*/);
}
0

Odkopałem gdzieś taki kod, pozwala on narysować elementy ComboBoxa z czerwonym tłem i białą czcionką. Oprócz podpięcia tej metody do zdarzenia DrawItem trzeba też ustawić właściwość DrawMode na OwnerDrawVariable.

using System.Drawing;
using System.Windows.Forms;

namespace CustomComboBox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.comboBox1.Items.AddRange(new object[] { "Zosia", "Ada", "Gienia" });
        }

        private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
        {
            e.Graphics.FillRectangle(Brushes.Red, e.Bounds);
            e.Graphics.DrawString(
                this.comboBox1.Items[e.Index].ToString(),
                e.Font,
                Brushes.White,
                new Point(e.Bounds.X, e.Bounds.Y));
        }
    }
}

Mam nadzieję, że się przyda.

1 użytkowników online, w tym zalogowanych: 0, gości: 1