c#下拉颜色框

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); }

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值