拾色器组合框

时间:2014-09-02 05:52:58

标签: combobox custom-controls customization

我想为每个项目自定义我的组合框,与字体,背景等相同。
有没有简单的方法来设置每个Combobox项目的自定义背景颜色?

1 个答案:

答案 0 :(得分:0)

这是一个简单的例子。在这个例子中,我的组合框有一些与颜色名称相同的项目(红色,蓝色等),并从中更改每个项目的背景。只需流动步骤:

1)将 DrawMode 设置为 OwnerDrawVariable

如果此属性设置为正常,则此控件永远不会引发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");

您可以根据需要更改矩形大小和位置以绘制自己的项目。
我希望这篇文章很有用。