Systemfarben (KnownColors) in ComboBox anzeigen

private void Form1_Load(object sender, EventArgs e)
{
    // wichtige Einstellungen für die 2 ComboBoxen
    comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
    comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
    comboBox2.DrawMode = DrawMode.OwnerDrawFixed;
    comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;

    // alle bekannte Farben im System in ein Array schreiben
    Array caKnown = Enum.GetValues(typeof(System.Drawing.KnownColor));

    foreach (KnownColor kC in caKnown)
    {
        Color curC = Color.FromKnownColor(kC);

        // wenn Systemfarbe, dann in ComboBox 1
        if (curC.IsSystemColor)
        {
            // Systemfarben
            comboBox1.Items.Add(curC.Name.ToString());
        }
        else
        {
            // restl. Farben in ComboBox 2
            comboBox2.Items.Add(curC.Name.ToString());
        }
    }
}

// diese Funktion sollte jeder der 2 Comboboxen zugewiesen werden (DrawItem)
private void comboBox_DrawItem(object sender, DrawItemEventArgs e)
{
    if (e.Index >= 0)
    {
        ComboBox cboBox = sender as ComboBox;

        if (cboBox != null)
        {
            // links einen Bereich definieren, wo die Farbe angezeigt wird
            Rectangle rc_left = new Rectangle(e.Bounds.X, e.Bounds.Y, 20, e.Bounds.Height);
            // rechts einen Bereich definieren, wo der Name angezeigt wird
            Rectangle rc_right = new Rectangle(e.Bounds.X + 20, e.Bounds.Y, e.Bounds.Width - 20, e.Bounds.Height);

            // akt. Farbe zum Namen heraussuchen
            KnownColor K = (KnownColor)System.Enum.Parse(typeof(KnownColor), cboBox.Items[e.Index].ToString());
            Color C = System.Drawing.Color.FromKnownColor(K);

            // kl. Rahmen um den Eintrag zeichnen
            e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.White), 2), rc_left);

            // links das Kästchen für die Hintergrundfarbe anzeigen
            e.Graphics.FillRectangle(new SolidBrush(C), rc_left);

            // rechts den Text (Farbnamen) anzeigen
            e.Graphics.DrawString(cboBox.Items[e.Index].ToString(), new Font("Ariel", 8), new SolidBrush(Color.Black), rc_right, StringFormat.GenericDefault);
        }
    }
}

Schreibe einen Kommentar