用ComboBox控件实现颜色下拉框

来源:互联网 发布:淘宝优惠券群怎么加入 编辑:程序博客网 时间:2024/05/21 09:24

转自:http://blog.sina.com.cn/s/blog_5b101dbf0100ggy6.html

看到VS属性设置中的颜色下拉框,于是也想做一个类似的颜色下拉框。最理想的还是VISIO的那种颜色选择方式,还是先从简单的开始,在可用的控件中首先想到的就是ComboBox选择控件,用系统颜色填充各个选项,用它的DrawItem事件完成:

private void Form1_Load(object sender, EventArgs e)
{
myComboBox.Items.Clear();

Array allColors = Enum.GetValues(typeof(KnownColor)); //获得系统颜色集合
foreach (KnownColor var in allColors)
{
myComboBox.Items.Add(var.ToString());//加载该选项框的子项
}
myComboBox.SelectedIndex = 1;

}
private void myComboBox_DrawItem(object sender, DrawItemEventArgs e)
{
//判断是否需要重绘
if (e.Index >= 0)
{
string colorName = myComboBox.Items[e.Index].ToString();//子项的颜色名
SolidBrush brush = new SolidBrush(Color.FromName(colorName)); //画笔
Font font = new Font("宋体", 9);//字体样式
Brush brushs = Brushes.Black;

Rectangle rect = e.Bounds;//获得需要重绘的区域
rect.Inflate(-2, -2);//缩放一定大小

 Rectangle rectColor = new Rectangle(rect.Location,new Size(20,rect.Height));
e.Graphics.FillRectangle(brush, rectColor);// 填充颜色
e.Graphics.DrawRectangle(Pens.Black, rectColor);// 绘制边框

//绘制文字
e.Graphics.DrawString(colorName, font, brushs, (rect.X+22), rect.Y);
}

}

同时还需要设置该控件的DrawMode和DropDownStyle属性,类似的控件Listbox也可按同样方法实现颜色选择,DrawMode属性为NORMAL时,有选中效果,但自己绘制的选项则不会出现选中效果,若想实现,可在DrawItem中加入一个状态判定,如:

//绘制选中效果
if ((e.State & DrawItemState.Selected) == DrawItemState.Selected)
{
SolidBrush brushItem = new SolidBrush(SystemColors.MenuHighlight); //画笔
Rectangle rectItem = e.Bounds;
e.Graphics.FillRectangle(brushItem, rectItem);
}
else
{
SolidBrush brushItem = new SolidBrush(SystemColors.Window); //画笔
Rectangle rectItem = e.Bounds;
e.Graphics.FillRectangle(brushItem, rectItem);
}

 

0 0
原创粉丝点击