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狂热爱好者加入,希望大家积极学习,一个月以上不说话者可能开除出群!

  • 相关阅读:
    【Uvalive4960】 Sensor network (苗条树,进化版)
    【UVA 1151】 Buy or Build (有某些特别的东东的最小生成树)
    【UVA 1395】 Slim Span (苗条树)
    【UVA 10600】 ACM Contest and Blackout(最小生成树和次小生成树)
    【UVA 10369】 Arctic Network (最小生成树)
    【UVA 10816】 Travel in Desert (最小瓶颈树+最短路)
    【UVA 11183】 Teen Girl Squad (定根MDST)
    【UVA 11865】 Stream My Contest (二分+MDST最小树形图)
    【UVA 11354】 Bond (最小瓶颈生成树、树上倍增)
    【LA 5713 】 Qin Shi Huang's National Road System (MST)
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/2093837.html
Copyright © 2011-2022 走看看