关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

C#圆形Button——RoundButton

发布时间:2019-12-05 17:25:19

C#中自定义控件,圆形按钮。编译生成后会在工具箱生成自定义的控件,通过其半径属性设置大小,通过ImageNormal等属性设置图片。

2bf228e41782ee530f32a0879e70690.png


using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

namespace YcPackageTool.Widgets

{

    class RoundButton : Button

    {

        private int radius;//半径 

        //圆形按钮的半径属性

        [CategoryAttribute("布局"), BrowsableAttribute(true), ReadOnlyAttribute(false)]

        public int Radius

        {

            set

            {

                radius = value;

                this.Height = this.Width = Radius;

            }

            get

            {

                return radius;

            }

        }

        private Image imageEnter;

        [CategoryAttribute("外观"), BrowsableAttribute(true), ReadOnlyAttribute(false)]

        public Image ImageEnter

        {

            set

            {

                imageEnter = value;

            }

            get

            {

                return imageEnter;

            }

        }

        private Image imageNormal;

        [CategoryAttribute("外观"), BrowsableAttribute(true), ReadOnlyAttribute(false)]

        public Image ImageNormal

        {

            set

            {

                imageNormal = value;

                BackgroundImage = imageNormal;

            }

            get

            {

                return imageNormal;

            }

        }

        //以下代码用于在VS中隐藏BackgroundImage属性,使得只能通过Diameter设置Height和Width

        [BrowsableAttribute(false)]

        public new Image BackgroundImage

        {

            get

            {

                return base.BackgroundImage;

            }

            set

            {

                base.BackgroundImage = value;

            }

        }

        //以下代码用于在VS中隐藏Size属性,使得只能通过Diameter设置Height和Width

        [BrowsableAttribute(false)]

        public new Size Size

        {

            get

            {

                return base.Size;

            }

            set

            {

                base.Size = value;

            }

        }

        public RoundButton()

        {

            Radius = 64;

            this.Height = this.Width = Radius;

            this.FlatStyle = FlatStyle.Flat;

            this.FlatAppearance.BorderSize = 0;

            this.BackgroundImage = imageEnter;

            this.BackgroundImageLayout = ImageLayout.Stretch;

        }

        //重写OnPaint

        protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)

        {

            base.OnPaint(e);

            System.Drawing.Drawing2D.GraphicsPath path = new System.Drawing.Drawing2D.GraphicsPath();

            path.AddEllipse(0, 0, Radius, Radius);

            this.Region = new Region(path);

        }

        //重写OnMouseEnter

        //protected override void OnMouseEnter(EventArgs e)

        //{

        //    Graphics g = this.CreateGraphics();

        //    g.DrawEllipse(new Pen(Color.Blue), 0, 0, this.Width, this.Height);

        //    g.Dispose();

        //}

        //重写OnSizeChanged

        protected override void OnSizeChanged(EventArgs e)

        {

            base.OnSizeChanged(e);

            if (Height != Radius)

            {

                Radius = Width = Height;

            }

            else if (Width != Radius)

            {

                Radius = Height = Width;

            }

        }

        //重写OnMouseEnter

        protected override void OnMouseEnter(EventArgs e)

        {

            base.OnMouseEnter(e);

            BackgroundImage = ImageEnter;

        }

        //重写OnMouseLeave

        protected override void OnMouseLeave(EventArgs e)

        {

            base.OnMouseLeave(e);

            BackgroundImage = ImageNormal;

        }

    }

}



/template/Home/Zkeys/PC/Static