C#自定义控件一下拉颜色框
效果图:
通过继承ComboBox可以设计出类似C#控件属性栏中的颜色下拉选择框。
添加组件命名为myColorComboBox.cs
第一步:继承ComboBox,publicpartialclassmyColorComboBox:ComboBox
第二步:构造下拉颜色选择框
privatevoidInitItems()
{
this.DrawMode =DrawMode.OwnerDrawFixed;//手动绘制所有元素
this.DropDownStyle =ComboBoxStyle.DropDownList;//下拉框样式设置为不能编辑
this.Items.Clear();//清空原有项
ArrayallColors =Enum.GetValues(typeof(KnownColor));//获取系统颜色名存入列表
foreach(KnownColorvarinallColors)
{
this.Items.Add(var.ToString());//加载该选项框的子项
}
this.SelectedIndex = 0;
}
在两个构造函数中加入InitItems()
第三步:重写OnDrawItem方法
protectedoverridevoidOnDrawItem(DrawItemEventArgse)
{
if(e.Index >= 0)//判断是否需要重绘
{
stringcolorName =this.Items[e.Index].ToString();//获取颜色名
SolidBrushbrush =newSolidBrush(Color.FromName(colorName));//定义画刷
Fontfont =newFont("宋体", 9);//定义字体
Rectanglerect = e.Bounds;
rect.Inflate(-2, -2);
RectanglerectColor =newRectangle(rect.Location,newSize(20, rect.Height));
e.Graphics.FillRectangle(brush, rectColor);//填充颜色
e.Graphics.DrawRectangle(Pens.Black, rectColor);//绘制边框
e.Graphics.DrawString(colorName, font,Brushes.Black, (rect.X + 22), rect.Y);//绘制文字
}
}
第四步:增加控件属性
///<summary>
///选择的颜色名称
///</summary>
publicstringSelectColorName
{
get{returnthis.Text; }
}
///<summary>
///选择的颜色
///</summary>
publicColorSelectColor
{
get{returnColor.FromName(this.Text); }
}
用法:
直接从控件栏中找到自定义控件myColorComboBox,拖过去自动命名为myColorCombBox1,可以通过myColorCombBox1.SelectColor获取颜色,类型为Color,通过myColorCombBox1.SelectColorName获取用户选定的颜色名。
下面贴出全部代码:
//控件名:myColorComboBox
//作者:刘典武
//时间:2011-06-01
usingSystem;
usingSystem.ComponentModel;
usingSystem.Collections.Generic;
usingSystem.Diagnostics;
usingSystem.Text;
usingSystem.Windows.Forms;
usingSystem.Drawing;
namespacemyControl
{
publicpartialclassmyColorComboBox:ComboBox
{
publicmyColorComboBox()
{
InitializeComponent();
InitItems();
}
publicmyColorComboBox(IContainercontainer)
{
container.Add(this);
InitializeComponent();
InitItems();
}
privatevoidInitItems()
{
this.DrawMode =DrawMode.OwnerDrawFixed;//手动绘制所有元素
this.DropDownStyle =ComboBoxStyle.DropDownList;//下拉框样式设置为不能编辑
this.Items.Clear();//清空原有项
ArrayallColors =Enum.GetValues(typeof(KnownColor));//获取系统颜色名存入列表
foreach(KnownColorvarinallColors)
{
this.Items.Add(var.ToString());//加载该选项框的子项
}
this.SelectedIndex = 0;
}
protectedoverridevoidOnDrawItem(DrawItemEventArgse)
{
if(e.Index >= 0)//判断是否需要重绘
{
stringcolorName =this.Items[e.Index].ToString();//获取颜色名
SolidBrushbrush =newSolidBrush(Color.FromName(colorName));//定义画刷
Fontfont =newFont("宋体", 9);//定义字体
Rectanglerect = e.Bounds;
rect.Inflate(-2, -2);
RectanglerectColor =newRectangle(rect.Location,newSize(20, rect.Height));
e.Graphics.FillRectangle(brush, rectColor);//填充颜色
e.Graphics.DrawRectangle(Pens.Black, rectColor);//绘制边框
e.Graphics.DrawString(colorName, font,Brushes.Black, (rect.X + 22), rect.Y);//绘制文字
}
}
///<summary>
///选择的颜色名称
///</summary>
publicstringSelectColorName
{
get{returnthis.Text; }
}
///<summary>
///选择的颜色
///</summary>
publicColorSelectColor
{
get{returnColor.FromName(this.Text); }
}
}
}