C#:自定义控件笔记

以下操作是基于 Visual Studio 2017.

1.操作

先创建一个windows窗体应用。

右击解决方案的命名空间,添加一个类,不是添加一个用户控件。

改这个类的代码,使之成为我们的 自定义控件。

2.代码如下:

using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace WindowsFormsApp11 {
    public class Class1 : Control {

        //这个一定要设置,不然边框及填充绘制不出来
        protected override System.Drawing.Size DefaultSize{
            get {
                return new Size(100,100);
            }
        }

        //鼠标进入时的填充颜色
        public Color HoverColor {
            get { return M_hoverColor; }
            set {
                M_hoverColor = value;
                Invalidate();
            }
        }

        //边框颜色
        public Color BorrderColor {
            get {
                return myborderColor;
            }
            set {
                myborderColor = value;
            }
        }

        #region
        Color myborderColor = Color.Red;
        private bool isMouseEnter = false;
        Color M_hoverColor = Color.Black;
        #endregion

        protected override void OnMouseEnter(EventArgs e) {
            isMouseEnter = true;
            Invalidate();
            base.OnMouseEnter(e);
        }

        protected override void OnMouseLeave(EventArgs e) {
            isMouseEnter = false;
            Invalidate();
            base.OnMouseLeave(e);
        }

        public Class1() {
            //绘制控件外形
            GraphicsPath myPath = new GraphicsPath();//创建路径对象
            myPath.AddEllipse(0, 0, Width, Height);//绘制圆形路径(绘制函数可选System.Drawing.Drawing2D下的所有绘制函数)(注意:新绘制的控件大小要小于原控件)
            this.Region = new Region(myPath); //将路径绑定到控件
        }

        protected override void OnPaint(PaintEventArgs e) {
            //填充背景的画刷
            SolidBrush brush = new SolidBrush(BackColor);
            if (isMouseEnter) {
                brush.Color = HoverColor;
            }
            //绘制填充
            //e.Graphics.FillRectangle(brush,e.ClipRectangle); //矩形
            e.Graphics.FillEllipse(brush,new RectangleF(0,0,Width,Height)); //圆

            //绘制边框
            GraphicsPath myPath = new GraphicsPath();//创建路径对象
            myPath.AddEllipse(0, 0, Width, Height);//绘制圆形路径(绘制函数可选System.Drawing.Drawing2D下的所有绘制函数)(注意:新绘制的控件大小要小于原控件)
            Pen pen = new Pen(BorrderColor);
            pen.Width = 5;
            e.Graphics.DrawPath(pen,myPath);

            
            base.OnPaint(e);
        }



    }

}

可以看到我们的新控件名字 是 Class1

然后重新生成解决方案,不然控件工具箱找不到我们自定义的控件。

随便在一个窗体体中用我们的 Class1. 效果如下:

然后,将鼠标移入区域,

猜你喜欢

转载自blog.csdn.net/qq_38261174/article/details/84881067