zoukankan      html  css  js  c++  java
  • C#自定义控件一下拉颜色框

    C#自定义控件一下拉颜色框

    效果图:

    通过继承ComboBox可以设计出类似C#控件属性栏中的颜色下拉选择框。

    添加组件命名为myColorComboBox.cs

    第一步:继承ComboBoxpublic 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);//绘制文字

                }

            }

    第四步:增加控件属性

    /// <summary>

            /// 选择的颜色名称

            /// </summary>

            public string SelectColorName

            {

                get { return this.Text; }

            }

     

            /// <summary>

            /// 选择的颜色

            /// </summary>

            public Color SelectColor

            {

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

            }

    用法:

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

    下面贴出全部代码:

    //控件名:myColorComboBox

    //作者:刘典武

    //时间:2011-06-01

     

    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);//绘制文字

                }

            }

     

            /// <summary>

            /// 选择的颜色名称

            /// </summary>

            public string SelectColorName

            {

                get { return this.Text; }

            }

     

            /// <summary>

            /// 选择的颜色

            /// </summary>

            public Color SelectColor

            {

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

            }

        }

    }

     

    欢迎加入C#学习群(128874886)共同探讨C#技术,加的时候注明理由,本群热烈欢迎积极分子或者.NET狂热爱好者加入,希望大家积极学习,一个月以上不说话者可能开除出群!

  • 相关阅读:
    前端模块化开发的价值
    Promise对象
    avalon define新老风格对比
    jQuery知识点1
    SASS
    HTML5
    JSON
    css垂直居中
    maven nexus 部署
    Linux 平台下 lzo和hadoop-lzo安装与集成
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/2093837.html
Copyright © 2011-2022 走看看