【发布时间】:2014-09-02 05:52:57
【问题描述】:
我想自定义我的组合框每个项目,与字体、背景等相同。
有没有简单的方法来设置每个 Combobox 项的自定义背景颜色?
【问题讨论】:
-
问题有点老了,不过还在找功能的朋友可以看看这个帖子:Show list of colors in ComboBox - Color Picker
标签: combobox custom-controls customization
我想自定义我的组合框每个项目,与字体、背景等相同。
有没有简单的方法来设置每个 Combobox 项的自定义背景颜色?
【问题讨论】:
标签: combobox custom-controls customization
这是一个简单的例子。在这个例子中,我的组合框有一些与颜色名称相同的项目(红色、蓝色等),并由此更改每个项目的背景。只需执行以下步骤:
1) 将 DrawMode 设置为 OwnerDrawVariable:
如果此属性设置为 Normal,则此控件永远不会引发 DrawItem 事件
ComboBox1.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
2) 添加 DrawItem 事件:
ComboBox1.DrawItem += new DrawItemEventHandler(ComboBox1_DrawItem);
3)输入您自己的代码来自定义每个项目:
private void ComboBox1_DrawItem(object sender, DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Rectangle rect = e.Bounds; //Rectangle of item
if (e.Index >= 0)
{
//Get item color name
string itemName = ((ComboBox)sender).Items[e.Index].ToString();
//Get instance a font to draw item name with this style
Font itemFont = new Font("Arial", 9, FontStyle.Regular);
//Get instance color from item name
Color itemColor = Color.FromName(itemName);
//Get instance brush with Solid style to draw background
Brush brush = new SolidBrush(itemColor);
//Draw the item name
g.DrawString(itemName, itemFont, Brushes.Black, rect.X, rect.Top);
//Draw the background with my brush style and rectangle of item
g.FillRectangle(brush, rect.X, rect.Y, rect.Width, rect.Height);
}
}
4) 还需要添加颜色:
ComboBox1.Items.Add("Black");
ComboBox1.Items.Add("Blue");
ComboBox1.Items.Add("Lime");
ComboBox1.Items.Add("Cyan");
ComboBox1.Items.Add("Red");
ComboBox1.Items.Add("Fuchsia");
ComboBox1.Items.Add("Yellow");
ComboBox1.Items.Add("White");
ComboBox1.Items.Add("Navy");
ComboBox1.Items.Add("Green");
ComboBox1.Items.Add("Teal");
ComboBox1.Items.Add("Maroon");
ComboBox1.Items.Add("Purple");
ComboBox1.Items.Add("Olive");
ComboBox1.Items.Add("Gray");
您可以更改矩形的大小和位置以根据需要绘制自己的项目。
我希望这篇文章有用。
【讨论】: