C#简单圆形边框Button——RoundButton

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

    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;
            }
        }

转自:https://blog.csdn.net/luzhenyuxfcy/article/details/51966673

猜你喜欢

转载自blog.csdn.net/kucoffee12/article/details/85012944