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. 效果如下:
然后,将鼠标移入区域,