C# 下拉渐变颜色条


    public partial class GradientColorComboBox : UserControl
    {
        private Color m_StartColor;
        private Color m_EndColor;

        /// <summary>
        /// 封装字段
        /// </summary>
        public Color StartColor
        {
            get { return m_StartColor; }
            set { m_StartColor = value; }
        }
        /// <summary>
        /// 封装字段
        /// </summary>
        public Color EndColor
        {
            get { return m_EndColor; }
            set { m_EndColor = value; }
        }
        /// <summary>
        /// Combobox颜色选择发生变化时激发的事件
        /// </summary>
        public event EventHandler SelectColorChanged;

        //预定义的渐变色

        private static string[] colorList ={
            "AliceBlue|Green","Aqua|Aquamarine","Red|SkyGreen",
            "Bisque|Black","BlanchedAlmond|Blue","BlueViolet|Brown",
            "BurlyWood|CadetBlue","Chartreuse|Chocolate",
            "CornflowerBlue|Cornsilk","Crimson|Cyan","DarkBlue|DarkCyan",
            "DarkGoldenrod|DarkGray","DarkGreen|DarkKhaki",
            "DarkMagenta|DarkOliveGreen","DarkOrange|DarkOrchid"
        };
        /// <summary>
        /// 构造函数
        /// </summary>
        public GradientColorComboBox()
        {

            InitializeComponent();

            PersonalizeComponent();

        }
        /// <summary>
        /// 加载各颜色项(Items)
        /// </summary>
        private void PersonalizeComponent()
        {

            this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;

            this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

            this.comboBox1.ItemHeight = 18;

            this.comboBox1.BeginUpdate();

            this.comboBox1.Items.Clear();

            foreach (string oneColor in colorList)
            {

                this.comboBox1.Items.Add(oneColor);

            }

            this.comboBox1.EndUpdate();

        }
        /// <summary>
        /// 绘制颜色矩形,每次添加Item时都会触发该事件,该函数由在ComboBox的属性标签的事件栏下双击DrawItem自动生成
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBox1_DrawItem(object sender, DrawItemEventArgs e)
        {

            if (e.Index < 0)

                return;

            Rectangle rect = e.Bounds;

            //读取起始、终止颜色值

            string startColorName = comboBox1.Items[e.Index].ToString().Split('|')[0];

            string endColorName = comboBox1.Items[e.Index].ToString().Split('|')[1];

            m_StartColor = Color.FromName(startColorName);

            m_EndColor = Color.FromName(endColorName);

            //选择线性渐变刷子

            LinearGradientBrush brush = new LinearGradientBrush(rect, m_StartColor, m_EndColor, 0, false);

            rect.Inflate(-1, -1);

            // 填充颜色

            e.Graphics.FillRectangle(brush, rect);

            // 绘制边框

            e.Graphics.DrawRectangle(Pens.Black, rect);


        }
        /// <summary>
        /// 在ComboBox选择项改变触发事件中激活颜色传递事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {

            if (SelectColorChanged != null)
            {

                SelectColorChanged(this, e);

            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值