• C#自定义控件五报警按钮


    C#自定义控件五报警按钮

    效果图:

    这个是本人最得意的控件之一,在商业项目中使用,史无前例,个人原创,应用于项目EcanAlarmSystem报警监控系统中,作为报警组件中的核心组件,在速度和展现形式上完美符合现实需求。

    分析:一个防区有六种状态,分别是布防、撤防、旁路、报警、故障、断开,需要在不同状态显示不同的颜色,一个防区对应的属性有防区号、防区名、防区图片、防区类型、主机类型、子系统、地图X坐标、地图Y坐标。

    第一步:添加用户控件,命名为myAlarmButton

    第二步:定义枚举

    public enum myButtonState

        {

            bufang = 1,//布防状态

            chefang = 2,//撤防状态

            panglu = 3,//旁路状态

            baojing = 4,//报警状态

            duankai = 5,//防区断开

            guzhang = 6//防区故障

        }

    第三步:定义属性

    第四步:重写OnPaint方法

    protected override void OnPaint(PaintEventArgs e)

            {

                this.Size = new Size(30, 30);

                Graphics g = e.Graphics;

                g.FillEllipse(new SolidBrush(this.nowColor), 0.0f, 0.0f, 30, 30);

                g.DrawEllipse(new Pen(Color.Black, 1), 0.0f, 0.0f, 29, 29);

                g.DrawString(defenceID, new Font("宋体", 9, FontStyle.Bold), Brushes.White, 3, 9);

            }

    第五步:通过状态属性改变来改变颜色

    /// <summary>

            /// 防区当前状态

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区当前状态")]

            public myButtonState DefenceState

            {

                set

                {

                    defenceState = value;

                    if (value == myButtonState.bufang)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.bufangColor;

                    }

                    else if (value == myButtonState.chefang)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.chefangColor;

                    }

                    else if (value == myButtonState.panglu)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.pangluColor;

                    }

                    else if (value == myButtonState.duankai)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.duankaiColor;

                    }

                    else if (value == myButtonState.guzhang)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.guzhangColor;

                    }

                    else if (value == myButtonState.baojing)

                    {

                        myTimer.Start();

                    }

                    this.Invalidate();

                }

                get { return defenceState; }

            }

    贴出全部代码:

    //控件名:myAlarmButton

    //作者:刘典武

    //时间:2011-06-09

    using System;

    using System.Collections.Generic;

    using System.ComponentModel;

    using System.Drawing;

    using System.Data;

    using System.Text;

    using System.Windows.Forms;

    namespace myControl

    {

        public enum myButtonState

        {

            bufang = 1,//布防状态

            chefang = 2,//撤防状态

            panglu = 3,//旁路状态

            baojing = 4,//报警状态

            duankai = 5,//防区断开

            guzhang = 6//防区故障

        }

        public partial class myAlarmButton : UserControl

        {

            public myAlarmButton()

            {

                InitializeComponent();

                myTimer = new Timer();

                myTimer.Interval = myInterval;

                myTimer.Tick += new EventHandler(myTimer_Tick);

                //设置Style支持透明背景色

                this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.Selectable | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true);

                this.BackColor = Color.Transparent;

            }

            private string defenceID = "010";//防区号

            private string defenceName = "010";//防区名称

            private string defenceType = "03";//防区类型

            private string imageName;//防区对应图片名称

            private string subSystem = "01";//防区所属子系统

            private string hostType = "VISTA120";//防区对应主机类型

            private int x;//防区在地图上的X坐标

            private int y;//防区在地图上的Y坐标

            private int myInterval = 300;//报警颜色更改时间隔

            private bool isRedColor = false;//当前是否红色显示   

            private Timer myTimer;

            private myButtonState defenceState = myButtonState.chefang;//防区当前状态

            private Color bufangColor = Color.YellowGreen;//布防颜色

            private Color chefangColor = Color.Blue;//撤防颜色

            private Color pangluColor = Color.Silver;//旁路颜色

            private Color baojingColor = Color.Red;//报警颜色 

            private Color nowColor = Color.Blue;//当前颜色  

            //DS7400报警主机增加两种情况

            private Color duankaiColor = Color.DarkGoldenrod;//断开颜色

            private Color guzhangColor = Color.Black;//故障颜色

            /// <summary>

            /// 防区号

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区号")]

            public string DefenceID

            {

                set { defenceID = value; }

                get { return defenceID; }

            }

            /// <summary>

            /// 防区名称

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区名称")]

            public string DefenceName

            {

                set { defenceName = value; }

                get { return defenceName; }

            }

            /// <summary>

            /// 防区类型

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区类型")]

            public string DefenceType

            {

                set { defenceType = value; }

                get { return defenceType; }

            }

            /// <summary>

            /// 防区对应地图名称

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区对应地图名称")]

            public string DefenceImageName

            {

                set { imageName = value; }

                get { return imageName; }

            }

            /// <summary>

            /// 防区所属子系统

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区所属子系统")]

            public string SubSystem

            {

                set { subSystem = value; }

                get { return subSystem; }

            }

            /// <summary>

            /// 防区对应主机类型

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区对应主机类型")]

            public string HostType

            {

                set { hostType = value; }

                get { return hostType; }

            }

            /// <summary>

            /// 防区X坐标

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区X坐标")]

            public int X

            {

                set { x = value; }

                get { return x; }

            }

            /// <summary>

            /// 防区Y坐标

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区Y坐标")]

            public int Y

            {

                set { y = value; }

                get { return y; }

            }

            /// <summary>

            /// 报警颜色切换间隔

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("报警颜色切换间隔")]

            public int MyInterval

            {

                set { if (value < 100) { myInterval = 100; } else { myInterval = value; } }

                get { return myInterval; }

            }

            /// <summary>

            /// 防区当前状态

            /// </summary>

            [CategoryAttribute("报警按钮信息"), Description("防区当前状态")]

            public myButtonState DefenceState

            {

                set

                {

                    defenceState = value;

                    if (value == myButtonState.bufang)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.bufangColor;

                    }

                    else if (value == myButtonState.chefang)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.chefangColor;

                    }

                    else if (value == myButtonState.panglu)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.pangluColor;

                    }

                    else if (value == myButtonState.duankai)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.duankaiColor;

                    }

                    else if (value == myButtonState.guzhang)

                    {

                        myTimer.Stop();

                        isRedColor = false;

                        this.nowColor = this.guzhangColor;

                    }

                    else if (value == myButtonState.baojing)

                    {

                        myTimer.Start();

                    }

                    this.Invalidate();

                }

                get { return defenceState; }

            }

            /// <summary>

            /// 布防状态颜色

            /// </summary>

            [CategoryAttribute("报警按钮颜色"), Description("布防状态颜色")]

            public Color BuFangColor

            {

                set { bufangColor = value; }

                get { return bufangColor; }

            }

            /// <summary>

            /// 撤防状态颜色

            /// </summary>

            [CategoryAttribute("报警按钮颜色"), Description("撤防状态颜色")]

            public Color CheFangColor

            {

                set { chefangColor = value; }

                get { return chefangColor; }

            }

            /// <summary>

            /// 旁路状态颜色

            /// </summary>

            [CategoryAttribute("报警按钮颜色"), Description("旁路状态颜色")]

            public Color PangLuColor

            {

                set { pangluColor = value; }

                get { return pangluColor; }

            }

            /// <summary>

            /// 报警状态颜色

            /// </summary>

            [CategoryAttribute("报警按钮颜色"), Description("报警状态颜色")]

            public Color BaoJingColor

            {

                set { baojingColor = value; }

                get { return baojingColor; }

            }

            /// <summary>

            /// 断开状态颜色

            /// </summary>

            [CategoryAttribute("报警按钮颜色"), Description("断开状态颜色")]

            public Color DuanKaiColor

            {

                set { duankaiColor = value; }

                get { return duankaiColor; }

            }

            /// <summary>

            /// 故障状态颜色

            /// </summary>

            [CategoryAttribute("报警按钮颜色"), Description("故障状态颜色")]

            public Color GuZhangColor

            {

                set { guzhangColor = value; }

                get { return guzhangColor; }

            }

            private void myTimer_Tick(object sender, EventArgs e)

            {

                if (!isRedColor)

                {

                    this.nowColor = this.baojingColor;

                    isRedColor = true;

                }

                else

                {

                    this.nowColor = Color.Black;

                    isRedColor = false;

                }

                this.Invalidate();

            }

            protected override void OnPaint(PaintEventArgs e)

            {

                this.Size = new Size(30, 30);

                Graphics g = e.Graphics;

                g.FillEllipse(new SolidBrush(this.nowColor), 0.0f, 0.0f, 30, 30);

                g.DrawEllipse(new Pen(Color.Black, 1), 0.0f, 0.0f, 29, 29);

                g.DrawString(defenceID, new Font("宋体", 9, FontStyle.Bold), Brushes.White, 3, 9);

            }

        }

    }


  • 相关阅读:
    记一次CTF比赛过程与解题思路MISC部分
    使用requests爬虫遇到的一个奇葩的问题:UnicodeEncodeError: 'latin1' codec can't encode character
    纯前端实现词云展示+附微博热搜词云Demo代码
    亚马逊精细化选品服务
    乔布斯访谈笔记
    使用腾讯云轻量级服务器
    centos 设置阿里的yum源
    云未来、新可能 绿色、无处不在、可信的计算
    OpenKruise v1.0:云原生应用自动化达到新的高峰
    服务发现与配置管理高可用最佳实践
  • 原文地址:https://www.cnblogs.com/feiyangqingyun/p/2098858.html
Copyright © 2020-2023  润新知