public class ColorComboBox : System.Windows.Forms.ComboBox
{
public ColorComboBox()
{
this.DrawMode = DrawMode.OwnerDrawFixed;
this.DrawItem += new DrawItemEventHandler( OnDrawItem );
this.SelectedIndexChanged += new System.EventHandler( OnSelectedIndexChanged );
this.DropDown += new System.EventHandler( OnDropDown );
this.BackColor = Color.White;
this.ForeColor = Color.Black;
Items.Clear();
foreach(Color c in TypeDescriptor.GetConverter(typeof(Color)).GetStandardValues())
{
this.Items.Add(TypeDescriptor.GetConverter(c).ConvertToString(c));
}
this.SelectedIndex = 0;
this.DropDownStyle = ComboBoxStyle.DropDownList;
}
private Color mSelectedColor = Color.Black;
public Color SelectedColor
{
get
{
return mSelectedColor;
}
set
{
mSelectedColor = value;
this.SelectedIndex = this.Items.IndexOf(GetStringFromColor(value));
}
}
private void OnDrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Rectangle r = new Rectangle(e.Bounds.X + 2, e.Bounds.Y + 1,
e.Bounds.Width - 70, e.Bounds.Height - 4);
Color BrushColor = e.Index == -1 ? Color.Black :GetColorFromString((string)this.Items[e.Index]);
g.FillRectangle(new SolidBrush(BrushColor), r);
g.DrawRectangle(new Pen(Color.Black, 1), r);
string ColorName = e.Index == -1 ? "Black" : (string)this.Items[e.Index];
g.DrawString(ColorName, e.Font, new SolidBrush(Color.Black),
new Rectangle(r.X + r.Width, r.Y, e.Bounds.Width, e.Bounds.Height));
}
private void OnSelectedIndexChanged(object sender, System.EventArgs e)
{
mSelectedColor = GetColorFromString((string)this.SelectedItem);
}
private void OnDropDown(object sender, System.EventArgs e)
{
mSelectedColor = GetColorFromString((string)this.SelectedItem);
}
public string GetStringFromColor(Color color)
{
return TypeDescriptor.GetConverter(color).ConvertToString(color);
}
public Color GetColorFromString(string ColorName)
{
return ColorName == null ? Color.White : Color.FromName(ColorName);
}
} |