当前位置:  编程技术>.net/c#/asp.net

c# 下拉颜色框(自定义控件)的实现代码(图文)

    来源: 互联网  发布时间:2014-08-30

    本文导语:  本实例中,我们通过继承ComboBox设计出类似C#控件属性栏中的颜色下拉选择框,供大家学习参考。 效果图如下所示: 首先,添加组件命名为myColorComboBox.cs。   第一步:继承ComboBox,public partial class myColorComboBox : ComboBox   第...

本实例中,我们通过继承ComboBox设计出类似C#控件属性栏中的颜色下拉选择框,供大家学习参考。
效果图如下所示:

首先,添加组件命名为myColorComboBox.cs。
 
第一步:继承ComboBox,public partial class myColorComboBox : ComboBox
 
第二步:构造下拉颜色选择框
 

代码示例:
private void InitItems()
{
 this.DrawMode = DrawMode.OwnerDrawFixed;//手动绘制所有元素
 this.DropDownStyle = ComboBoxStyle.DropDownList;//下拉框样式设置为不能编辑
 this.Items.Clear();//清空原有项
 Array allColors = Enum.GetValues(typeof(KnownColor));//获取系统颜色名存入列表
 foreach (KnownColor var in allColors)
 {
     this.Items.Add(var.ToString()); //加载该选项框的子项
 }
this.SelectedIndex = 0;
}

在两个构造函数中加入InitItems()
 
第三步:重写OnDrawItem方法
 

代码示例:
protected override void OnDrawItem(DrawItemEventArgs e)
{
 if (e.Index >= 0)//判断是否需要重绘
 {
     string colorName = this.Items[e.Index].ToString();//获取颜色名
     SolidBrush brush = new SolidBrush(Color.FromName(colorName));//定义画刷
     Font font = new Font("宋体", 9);//定义字体
     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, Brushes.Black, (rect.X + 22), rect.Y);//绘制文字
 }
}
 

 
第四步:增加控件属性
 

代码示例:

///
/// 选择的颜色名称
///
public string SelectColorName
{
 get { return this.Text; }

 }

 ///
 /// 选择的颜色
 ///
public Color SelectColor
{

 get { return Color.FromName(this.Text); }
}

用法:
直接从控件栏中找到自定义控件myColorComboBox,拖过去自动命名为myColorCombBox1,可以通过myColorCombBox1.SelectColor获取颜色,类型为Color,通过myColorCombBox1.SelectColorName获取用户选定的颜色名。

完整代码:
 

代码示例:

//控件名:myColorComboBox
//作者:刘典武
//时间:2011-06-01
//site www.

using System;
using System.ComponentModel;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
using System.Windows.Forms;
using System.Drawing;

namespace myControl
{
    public partial class myColorComboBox : ComboBox
    {
 public myColorComboBox()
 {
 InitializeComponent();
 InitItems();
 }

       public myColorComboBox(IContainer container)
       {
    container.Add(this);
    InitializeComponent();
    InitItems();
 }
 private void InitItems()
 {
 this.DrawMode = DrawMode.OwnerDrawFixed;//手动绘制所有元素
 this.DropDownStyle = ComboBoxStyle.DropDownList;//下拉框样式设置为不能编辑
 this.Items.Clear();//清空原有项
 Array allColors = Enum.GetValues(typeof(KnownColor));//获取系统颜色名存入列表
 foreach (KnownColor var in allColors)
 {
     this.Items.Add(var.ToString()); //加载该选项框的子项
 }
 this.SelectedIndex = 0;
 }

 protected override void OnDrawItem(DrawItemEventArgs e)
 {
 if (e.Index >= 0)//判断是否需要重绘
 {
     string colorName = this.Items[e.Index].ToString();//获取颜色名
     SolidBrush brush = new SolidBrush(Color.FromName(colorName));//定义画刷
     Font font = new Font("宋体", 9);//定义字体
     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, Brushes.Black, (rect.X + 22), rect.Y);//绘制文字
 }
 }

 ///
 /// 选择的颜色名称
 ///
 public string SelectColorName
 {
 get { return this.Text; }
 }

 ///
 /// 选择的颜色
 ///
 public Color SelectColor
 {
 get { return Color.FromName(this.Text); }
 }
    }
}


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • jquery下拉菜单效果 jquery点击弹出下拉菜单的例子
  • 怎么从下拉框中取数?在线等
  • jQuery下拉选择插件 MagicCombo
  • jQuery下拉框美化插件 Select-or-Die
  • jQuery下拉框插件 FlexBox
  • jQuery 下拉菜单插件 jQuery menu-aim
  • jQuery 下拉列表 Custom Drop
  • jQuery 下拉列表插件 Heapbox
  • jQuery 下拉框插件 Selectik
  • jQuery水平下拉菜单 jMenu
  • 下拉框美化插件 Select2
  • jQuery下拉框插件 mcDropdown
  • jQuery下拉菜单插件 jQuery Simple Drop Down Menu
  • jQuery 下拉菜单插件 menu-aim
  • jQuery下拉组件 ddSlick
  • jQuery下拉列表插件 jQselectable
  • 如何在下拉列表中加入图片。
  • 下拉列表单的问题
  • 问个简单的问题(关于下拉框)!
  • 关于层与下拉列表


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3