废话不多言,直接代码:
public class RoundButton : Button { bool clickBool = false; //1.设置圆形 //2.设置渐变色 //3.设置tooltip //4.设置点击之后渐变色,tooltip ToolTip toolTip = new ToolTip(); public RoundButton() { toolTip.AutoPopDelay = 1000; toolTip.SetToolTip(this, "A: B分列选图。"); } [Browsable(true), DefaultValue(90), Description("按钮主体颜色渐变方向,X轴顺时针开始")] [Category("Appearance")] public int GradientAngle { get; set; } protected override void OnPaint(PaintEventArgs pevent) { base.OnPaintBackground(pevent); RectangleF rect = new RectangleF(0, 0, this.Width, this.Height); //两种brush使用 LinearGradientBrush和PathGradientBrush //Graphics g = pevent.Graphics; //g.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿 //Color FColor = Color.Orange; //Color TColor = Color.White; //Brush b = new LinearGradientBrush(rect, FColor, TColor, 45, false); //g.FillEllipse(b, pevent.ClipRectangle); if (!clickBool) { Graphics g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿 GraphicsPath graphicsPath = new GraphicsPath(); graphicsPath.AddEllipse(rect); PathGradientBrush pathGradientBrush = new PathGradientBrush(graphicsPath); pathGradientBrush.CenterColor = Color.White; pathGradientBrush.CenterPoint = new PointF(this.Width / 2, this.Height / 2); pathGradientBrush.SurroundColors = new Color[] { Color.Orange }; g.FillPath(pathGradientBrush, graphicsPath); } else { Graphics g = pevent.Graphics; g.SmoothingMode = SmoothingMode.AntiAlias;//抗锯齿 GraphicsPath graphicsPath = new GraphicsPath(); graphicsPath.AddEllipse(rect); PathGradientBrush pathGradientBrush = new PathGradientBrush(graphicsPath); pathGradientBrush.CenterColor = Color.White; pathGradientBrush.CenterPoint = new PointF(this.Width / 2, this.Height / 2); pathGradientBrush.SurroundColors = new Color[] { Color.Blue }; g.FillPath(pathGradientBrush, graphicsPath); } } protected override void OnMouseClick(MouseEventArgs e) { base.OnMouseClick(e); clickBool = !clickBool; if (clickBool) { toolTip.SetToolTip(this, "4 幅图任选。"); } else { toolTip.SetToolTip(this, "A: B分列选图。"); } } }