如何在windows应用程序的启动屏幕中设置进度指示器的动画

本文关键字:设置 动画 指示器 启动 windows 应用程序 屏幕 | 更新日期: 2023-09-27 18:24:41

我在windows应用程序中创建了一个启动屏幕。我希望在启动屏幕上添加一个循环"环"进度指示器(如Windows 8启动屏幕上显示的指示器),直到连接到主窗体。程序.cs中的代码是:

static void Main()
{
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        logo f = new logo();
        f.Shown += new EventHandler((o, e) =>
        {
            System.Threading.Thread t = new System.Threading.Thread(() =>
            {
                System.Threading.Thread.Sleep(4000);
                f.Invoke(new Action(() => { f.Close(); }));
            });
            t.IsBackground = true;
            t.Start();
        });
}

logo是启动窗体或启动屏幕,我想在windows 8启动时添加进度条或环形进度指示器。

如何在windows应用程序的启动屏幕中设置进度指示器的动画

默认控制集中没有特定的"周期"进度环控制,所以我认为您有两个选项:

添加一个标准的水平ProgressBar,并将其样式设置为Marquee-这将给你一个不确定的"进展正在发生,但我们不确定何时结束"的外观:

myProgressBar.Style = ProgressBarStyle.Marquee;

如果你想要一个环形/圆形进度指示器,那么最好使用动画.gif或类似的控件和ImageAnimator控件。

ImageAnimator.Animate方法的文档中,有一个很好的例子可以加载gif并遍历MSDN上的框架:

创建一个控件,例如"AnimatedProgress":

public partial class AnimatedProgress : UserControl
{
  //Create a Bitmpap Object.
  Bitmap animatedImage = new Bitmap("circle_progress_animation.gif");
  bool currentlyAnimating = false;
  //This method begins the animation. 
  public void AnimateImage() 
  {
    if (!currentlyAnimating)
    {
      //Begin the animation only once.
      ImageAnimator.Animate(animatedImage, new EventHandler(this.OnFrameChanged));
      currentlyAnimating = true;
    }
  }
  private void OnFrameChanged(object o, EventArgs e)
  {
    //Force a call to the Paint event handler. 
    this.Invalidate();
  }
  protected override void OnPaint(PaintEventArgs e)
  {
    //Begin the animation.
    AnimateImage();
    //Get the next frame ready for rendering.
    ImageAnimator.UpdateFrames();
    //Draw the next frame in the animation.
    e.Graphics.DrawImage(this.animatedImage, new Point(0, 0));
  }
}

将此控件添加到logo表单:

public Logo()
{
  InitializeComponent();
  var progressSwirl = new AnimatedProgress();
  progressSwirl.Location = new Point(50, 50);
  Controls.Add(progressSwirl);
}

(我发现通过代码添加它比使用设计器效果更好,因为我刚刚在AnimatedProgress控件中相当粗略地引用了图像,而VS设计器找不到图像。)

然后,你的骑行戒指将出现在你的闪屏上。

就显示飞溅屏幕道具的"最简单"方式而言,必须向Veldmius指出飞溅屏幕属性:

首先在你的项目中添加一个对Microsoft.VisualBasic.dll的引用,然后将你的程序.cs更新为

using System;
using System.Windows.Forms;
using Microsoft.VisualBasic.ApplicationServices;
namespace WindowsFormsApplication1
{
  public class Startup : WindowsFormsApplicationBase
  {
    protected override void OnCreateSplashScreen()
    {
      SplashScreen = new logo();
    }
    protected override void OnCreateMainForm()
    {
      MainForm = new Form1();
    }
  }
  static class Program
  {
    [STAThread]
    static void Main()
    {
      Application.EnableVisualStyles();
      Application.SetCompatibleTextRenderingDefault(false);
      new Startup().Run(new string[]{});
    }
  }
}

为了测试这一点,我在我的主表单的加载事件中添加了一个Thread.Sleep(5000),就这样了——我的徽标页面显示了5秒的动画进度,然后我的主窗体加载了。