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