c#自定义控件绘制五角星形状

1 创建用户控件

右击项目名 => 添加 => 用户控件(Windows窗体)
在这里插入图片描述

2 计算五角星各点坐标

设五角星顶点的坐标为(Xa,Ya),边长为a
在c#坐标系中,y轴向下为正,x轴向右为正
通过计算得出五角星各个坐标及示意图如下
在这里插入图片描述

3 重写OnPaint函数

protected override void OnPaint(PaintEventArgs e)
{
Graphics gra = e.Graphics;
Brush brush = new SolidBrush(Color.FromArgb(51, 153, 255));//填充的颜色
double sin18 = Math.Sin(Math.PI / 10);
double cos18 = Math.Cos(Math.PI / 10);
double sin36 = Math.Sin(Math.PI / 5);

    // 2*边长 + 2*边长*sin36 <= 宽度
    double length = this.Width / ((1+sin36)*2) ; //五角星边长

    // A
    PointF top = new PointF(60, 0);

    //B
    PointF topDownLeft = new PointF((float)(top.X - (length * sin18)), (float)(length * cos18)); //与顶点相连、左下的点
    
    //C
    PointF topDownRight = new PointF((float)(top.X + (length * sin18)), (float)(length * cos18)); //与顶点相连、右下的点
    
    //D
    PointF topDownLeftLeft = new PointF((float)(top.X - (length * sin18) - length), (float)(length * cos18)); //与顶点相连、左下的点 的 左边的点
    
    //E
    PointF topDownRightRight = new PointF((float)(top.X + (length * sin18) + length), (float)(length * cos18)); //与顶点相连、右下的点 的 右边的点
    
    //F
    PointF middleLeft = new PointF((float)(top.X - (length * sin18 * 2)), (float)(length * cos18 + length * sin36)); //中间左边凹点
   
    //G
    PointF middleRight = new PointF((float)(top.X + (length * sin18 * 2)), (float)(length * cos18 + length * sin36)); //中间左边凹点
    
    //J
    PointF bottomTop = new PointF(top.X, (float)(top.Y + cos18 * (2 * length + 2 * length * sin18) - (length * sin36))); //地步中间上面的点
    
    //H
    PointF bottomLeft = new PointF((float)(top.X - (sin18 * (2 * length + (2 * length * sin18)))), (float)(cos18 * ((2 * length) + 2 * length * sin18))); //底部左边的点
    
    //I
    PointF bottomRight = new PointF((float)(top.X + (sin18 * (2 * length + (2 * length * sin18)))), (float)(cos18 * ((2 * length) + 2 * length * sin18))); //底部右边的点

    PointF[] point = new PointF[10];
    point[0] = top; 
    point[1] = topDownLeft;
    point[2] = topDownLeftLeft;
    point[3] = middleLeft;
    point[4] = bottomLeft;
    point[5] = bottomTop;
    point[6] = bottomRight;
    point[7] = middleRight;
    point[8] = topDownRightRight;
    point[9] = topDownRight;
    gra.FillPolygon(brush, point);
}

4效果

写好控件的代码后,编译一下,然后从工具箱拉出来就可以用了。效果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值