C# 滑动开关效果

2022-04-21 17:22:02

C# 重绘checkbox生成滑动开关

通过调用checkbox控件的paint事件,在重绘事件里判断checked属性,如果选中绘制选中图形,如果未选中绘制未选中图形。

效果图:
在这里插入图片描述
绘制圆角矩形方法:

/// <summary>/// 填充圆角矩形/// </summary>/// <param name="g"></param>/// <param name="brush"></param>/// <param name="rect"></param>/// <param name="cornerRadius"></param>publicstaticvoidFillRoundRectangle(Graphics g,Brush brush,Rectangle rect,int cornerRadius){using(GraphicsPath path=CreateRoundedRectanglePath(rect, cornerRadius)){
                g.FillPath(brush, path);}}/// <summary>/// 圆角矩形路径/// </summary>/// <param name="rect"></param>/// <param name="cornerRadius"></param>/// <returns></returns>internalstaticGraphicsPathCreateRoundedRectanglePath(Rectangle rect,int cornerRadius){GraphicsPath roundedRect=newGraphicsPath();
            roundedRect.AddArc(rect.X, rect.Y, cornerRadius*2, cornerRadius*2,180,90);
            roundedRect.AddLine(rect.X+ cornerRadius, rect.Y, rect.Right- cornerRadius*2, rect.Y);
            roundedRect.AddArc(rect.X+ rect.Width- cornerRadius*2, rect.Y, cornerRadius*2, cornerRadius*2,270,90);
            roundedRect.AddLine(rect.Right, rect.Y+ cornerRadius*2, rect.Right, rect.Y+ rect.Height- cornerRadius*2);
            roundedRect.AddArc(rect.X+ rect.Width- cornerRadius*2, rect.Y+ rect.Height- cornerRadius*2, cornerRadius*2, cornerRadius*2,0,90);
            roundedRect.AddLine(rect.Right- cornerRadius*2, rect.Bottom, rect.X+ cornerRadius*2, rect.Bottom);
            roundedRect.AddArc(rect.X, rect.Bottom- cornerRadius*2, cornerRadius*2, cornerRadius*2,90,90);
            roundedRect.AddLine(rect.X, rect.Bottom- cornerRadius*2, rect.X, rect.Y+ cornerRadius*2);
            roundedRect.CloseFigure();return roundedRect;}

重绘代码:

privatevoidRectangleCheckBoxButton(object sender,PaintEventArgs e){CheckBox rButton=(CheckBox)sender;Graphics g= e.Graphics;
            g.Clear(this.BackColor);Rectangle RoundRect=newRectangle(0,0,50,30);            
            g.SmoothingMode= SmoothingMode.AntiAlias;//FillRoundRectangle(g, Brushes.White, radioButtonrect, 15);if(rButton.Checked){Color color=Color.FromArgb(55,197,90);Brush b1=newSolidBrush(color);FillRoundRectangle(g, b1, RoundRect,15);using(Pen pen=newPen(Color.FromArgb(255,255,255))){FillRoundRectangle(g, Brushes.White,newRectangle(22,2,26,26),13);}}else{using(Pen pen=newPen(Color.FromArgb(255,255,255))){FillRoundRectangle(g, Brushes.Silver,  RoundRect,15);FillRoundRectangle(g,Brushes.White,newRectangle(2,2,26,26),13);}}Font f=newFont("微软雅黑",12);
            g.DrawString(((CheckBox)sender).Text,f,  Brushes.White,newPointF(60,6));}

调用:

privatevoidcheckBox1_Paint(object sender,PaintEventArgs e){RectangleCheckBoxButton(sender, e);}
  • 作者:qq53716684
  • 原文链接:https://blog.csdn.net/yx1234321/article/details/106207819
    更新时间:2022-04-21 17:22:02