c# UserControl OnPaint 画2个同心圆 在内圆中心画,在画一个指针
时间: 2024-09-19 12:06:24 浏览: 17
在 C# 中,如果你想要在一个 `UserControl` 上通过自定义绘画实现两个同心圆并添加一个指针,你可以使用 `OnPaint` 方法结合 `Graphics` 对象来进行绘制。下面是一个简单的示例:
```csharp
using System.Drawing;
using System.Windows.Forms;
public partial class CustomCircleControl : UserControl
{
private int innerRadius = 50;
private int outerRadius = 70;
private Point pointerCenter = new Point(outerRadius / 2 + 10, outerRadius / 2);
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
// 创建 Pen 和 Brush 对象
Pen penOuter = new Pen(Color.Black, 3); // 外圆笔刷
Pen penInner = new Pen(Color.Gray, 1); // 内圆笔刷
SolidBrush brushFill = new SolidBrush(Color.LightGray); // 圆填充色
// 绘制外圆
e.Graphics.DrawEllipse(penOuter, pointerCenter.X - outerRadius, pointerCenter.Y - outerRadius, outerRadius * 2, outerRadius * 2);
// 绘制内圆
e.Graphics.DrawEllipse(penInner, pointerCenter.X - innerRadius, pointerCenter.Y - innerRadius, innerRadius * 2, innerRadius * 2);
// 使用 Brush 填充内圆
e.Graphics.FillEllipse(brushFill, pointerCenter.X - innerRadius, pointerCenter.Y - innerRadius, innerRadius * 2, innerRadius * 2);
// 绘制指针
Pen pointerPen = new Pen(Color.Red, 2);
double angle = Math.PI / 2; // 指针开始角度,可以根据需求调整
e.Graphics.DrawLine(pointerPen, pointerCenter, new Point(pointerCenter.X + (outerRadius / 2) * Math.Cos(angle), pointerCenter.Y + (outerRadius / 2) * Math.Sin(angle)));
// 更新指针角度
angle += 0.01f; // 每次 Paint 循环更新一点
if (angle >= 2 * Math.PI)
angle = 0;
// 转换角度为弧度并绘制到指定点
e.Graphics.DrawLine(pointerPen, pointerCenter, new Point(pointerCenter.X + (outerRadius / 2) * Math.Cos(angle), pointerCenter.Y + (outerRadius / 2) * Math.Sin(angle)));
// 增加动画效果
this.Invalidate(); // 强制重绘以便看到指针移动
}
}
```