winform自定义控件---ULightControl指示灯/启停控件

ULightControl指示灯/启停控件

指示灯控件一一派生 于Control,自定义控件
用作状态显示,如设备的运行状态,启停按钮的状态,也可用作按钮
创建过程:
1.设置控件样式:
2.属性扩展: CenterColor 中心颜色BorderColor 边框颜色
LightFocusColor状态为On时灯的颜色
LightNormalColor状态为Off时灯的颜色
StateText灯状态文本
VarName 状态参数名
IsOn灯状态
3.扩展事件: ClickEvent 单击时触发
4.绘制外观:边框灯文本

public partial class ULightControl : Control
    {
        public ULightControl()
        {
            InitializeComponent();
            SetStyle(ControlStyles.Selectable,true);//控件可以接受焦点
            SetStyle(ControlStyles.AllPaintingInWmPaint, true);
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            SetStyle(ControlStyles.UserPaint, true);
            SetStyle(ControlStyles.ResizeRedraw, true);
            SetStyle(ControlStyles.SupportsTransparentBackColor, true);
            lightText = stateText;
        }
        public event EventHandler ClickEvent;//单击事件
        private Color m_centerColor = Color.White;
        private Color m_surroundColor = Color.Green;

        public Color CenterColor
        {
            get => m_centerColor;
            set
            {
                m_centerColor = value;
                Refresh();
            }
        }

        private Color m_borderColor = Color.Gray;
        //边框颜色
        public Color BorderColor
        {
            get => m_borderColor;
            set
            {
                m_borderColor = value;
                Refresh();
            }
        }

        private Color m_focusColor = Color.Green;
        // 运行时灯的颜色
        public Color LightFocusColor
        {
            get => m_focusColor;
            set
            {
                m_focusColor = value;
                Refresh();
            }
        }

        private Color m_normalColor = Color.Red;
        // 停止时灯的颜色
        public Color LightNormalColor
        {
            get => m_normalColor;
            set
            {
                m_normalColor = value;
                m_surroundColor = m_normalColor;
                Refresh();
            }
        }

        private string stateText = "运行";
        // 指示灯状态文本
        public string StateText
        {
            get { return stateText; }
            set
            {
                stateText = value;
                lightText = stateText;
                Refresh();
            }
        }

        private string focusstateText = "已运行";
        // 指示灯状态
        public string FocusStateText
        {
            get { return focusstateText; }
            set
            {
                focusstateText = value;
                Refresh();
            }
        }

        private string varName;
        // 状态参数名称
        public string VarName
        {
            get { return varName; }
            set { varName = value; }
        }

        private bool  isOn=false;
        // 指示灯的状态
        public bool  IsOn
        {
            get { return isOn; }
            set { isOn = value;
                if(isOn)//如果状态是运行时
                {
                    m_surroundColor = LightFocusColor;//显示运行时颜色
                }
                else//如果是停止状态
                {
                    m_surroundColor = LightNormalColor;//显示默认颜色
                }
                Refresh();
            }
        }

        private void ULightControl_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.SmoothingMode = SmoothingMode.AntiAlias;
            //重绘时 画出中心放射颜色的圆形
            var path = new GraphicsPath();
            //灯的矩形
            Rectangle rectEllipse;
            //边框矩形
            Rectangle borderEllipse;
            //如果有文本
            if(!string.IsNullOrEmpty(lightText))
            {
                //定义外边框圆的矩形  
                borderEllipse = new Rectangle(this.Width / 4, this.Height / 8, this.Width / 2, this.Height / 2);
                //定义指示灯圆的矩形
                rectEllipse = new Rectangle(this.Width / 4+ 4, this.Height / 8+ 4, this.Width / 2- 8, this.Height / 2 - 8);
            }
            else //没有设置文本时
            {
                //定义外边框圆的矩形
                borderEllipse = new Rectangle(5, 5, this.Width -10, this.Height -10);
                //定义指示灯圆的矩形
                rectEllipse = new Rectangle(4+this.Width/10, 4+this.Height/10, this.Width - 8- this.Width / 5, this.Height - 8- this.Height / 5);
            }
            path.AddEllipse(rectEllipse);//将表示指示灯的圆添加到路径
            //创建一个填充路径的渐变画刷----径向渐变
            var pthGrBrush = new PathGradientBrush(path)
            {
                CenterColor = CenterColor //中心颜色
            };

            Color[] colors = { this.m_surroundColor };
            pthGrBrush.SurroundColors = colors;//关联点的颜色
            g.FillEllipse(new SolidBrush(BorderColor), borderEllipse);//填充外边框圆
            g.FillEllipse(pthGrBrush, rectEllipse);//填充指示灯部分
           //绘制文本
            if (!string.IsNullOrEmpty(lightText))
            {
                //定义绘制文本所在位置的矩形
                Rectangle rect = new Rectangle(this.Width / 2 - this.Width / 3, (this.Height - this.Height / 3), this.Width - this.Width / 3, this.Height / 3);
                //定义格式化对象
                StringFormat format = new StringFormat();
                format.Alignment = StringAlignment.Center;//水平对齐
                format.LineAlignment = StringAlignment.Center;//垂直对齐
                //绘制文本
                g.DrawString(lightText, this.Font, new SolidBrush(this.ForeColor), rect, format);
            }
           
        }

        private string lightText;
        //如果有注册ClickEvent 调用事件处理程序
        protected override void OnClick(EventArgs e)
        {
            if(ClickEvent!=null)
            {
                ClickEvent.Invoke(this, new EventArgs());
            }                             
        }
    }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值