重绘按钮,做个自己的圆形LED指示灯

        最近为了做个上位机触摸屏软件,客户要求和工业触摸屏界面一样,要求指示灯做成圆形的。将C#中的按钮外形重绘,加入了从外到内的渐变功能,代码如下:

        实际应用中,添加LED控件后,修改属性type的值,指示灯的颜色就会自动切换。

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Test
{
    class Led : Button
    {
        private Color ledColor = Color.Silver;
        private bool type_;

        /// <summary>
        /// 指示灯颜色切换
        /// </summary>
        public bool type
        {
            get
            {
                return type_;
            }
            set
            {
                if(this.type_ != value)
                {
                    this.type_ = value;
                    if(!this.type_)
                        ledColor = Color.Silver;
                    else
                        ledColor = Color.Lime;

                    //强制重绘
                    this.Invalidate();
                }
            }
        }

        

        public Led()
        {
            this.Paint += new System.Windows.Forms.PaintEventHandler(this.Ovalshape_Paint);
        }


        private void Ovalshape_Paint(object sender, PaintEventArgs e)
        {
            //重绘时 画出中心放射颜色的圆形
            GraphicsPath path = new GraphicsPath();
            path.AddEllipse(0, 0, this.Size.Width, this.Size.Height);
            PathGradientBrush pthGrBrush = new PathGradientBrush(path);

            //中心的颜色
            pthGrBrush.CenterColor = Color.White;
            //边缘的颜色
            Color[] colors = new Color[] { this.ledColor };
            pthGrBrush.SurroundColors = colors;
            e.Graphics.FillEllipse(pthGrBrush, 0, 0, this.Size.Width, this.Size.Height);

            path.Dispose();
            pthGrBrush.Dispose();
        }




        protected override void OnPaint(PaintEventArgs pevent)
        {
            //使控件边界也为圆形
            GraphicsPath gp = new GraphicsPath();
            gp.AddEllipse(0, 0, this.Width, this.Height);

            this.Region = new System.Drawing.Region(gp);
            base.OnPaint(pevent);
            base.OnPaint(pevent);

            gp.Dispose();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值