Winform圆形环绕的Loading动画实现代码


在WinForms中实现一个圆形环绕的Loading动画,通常可以通过`Timer`控件和`Graphics`类来绘制动画。下面是一个基本的示例代码,展示了如何在WinForms窗体中创建一个简单的圆形环绕Loading动画。

首先,在你的WinForms窗体上,你需要添加一个`Timer`控件,并将其`Interval`属性设置为一个合适的值(例如,10毫秒),以控制动画的流畅度。同时,你还需要重写窗体的`OnPaint`方法或使用`Paint`事件来绘制动画。

以下是一个简单的实现示例:


using System;
using System.Drawing;
using System.Windows.Forms;

public partial class LoadingForm : Form
{
    private Timer timer;
    private float angle = 0f; // 用于控制动画的角度

    public LoadingForm()
    {
        InitializeComponent();

        // 初始化Timer
        timer = new Timer();
        timer.Interval = 10; // 10毫秒
        timer.Tick += Timer_Tick;
        timer.Start();

        // 设置窗体为双缓冲,以减少绘制时的闪烁
        this.DoubleBuffered = true;

        // 确保窗体重绘时调用自定义的绘制方法
        this.Paint += LoadingForm_Paint;
    }

    private void Timer_Tick(object sender, EventArgs e)
    {
        // 更新角度,实现动画效果
        angle += 1f;
        if (angle >= 360f)
        {
            angle = 0f; // 重置角度
        }

        // 触发重绘
        this.Invalidate();
    }

    private void LoadingForm_Paint(object sender, PaintEventArgs e)
    {
        // 获取Graphics对象
        Graphics g = e.Graphics;

        // 设置抗锯齿效果
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;

        // 绘制圆形背景(可选)
        g.FillEllipse(Brushes.White, 10, 10, ClientSize.Width - 20, ClientSize.Height - 20);

        // 绘制环绕的圆形线条
        using (Pen pen = new Pen(Color.Blue, 5)) // 线条颜色和宽度
        {
            // 计算线条的起始和结束角度
            float startAngle = -90f; // 假设从上方开始绘制
            float sweepAngle = angle; // 扫过的角度

            // 绘制圆弧
            g.DrawArc(pen, 15, 15, ClientSize.Width - 30, ClientSize.Height - 30, startAngle, sweepAngle);
        }
    }

    // 确保在窗体关闭时停止Timer
    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        timer.Stop();

        base.OnFormClosing(e);
    }
}

在这个示例中,`Timer_Tick`方法会在每个`Interval`指定的时间间隔内被调用,并更新角度值`angle`。当`angle`达到或超过360度时,会将其重置为0度,以实现连续的动画效果。在`LoadingForm_Paint`方法中,我们根据当前的`angle`值绘制一个圆弧,从而创建出环绕的Loading动画效果。

请注意,这个示例是一个基本的实现,你可以根据需要进行调整和优化,比如改变线条的颜色、宽度、动画速度等。