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

时间:2014-09-25 14:13:07

标签: c# winforms

我在Windows应用程序中创建了一个启动画面。我希望在启动屏幕上添加循环“响铃”进度指示器(如Windows 8启动屏幕上显示的那样),直到连接主表单。 program.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启动时添加进度条或响铃进度指示器。

1 个答案:

答案 0 :(得分:2)

默认控件集中没有特定的“循环”进度响铃控件,所以我说你有两个选择:

添加一个标准水平ProgressBar,并将其样式设置为Marquee - 这将为您提供不确定的“正在发生的进展,但我们不确定它何时完成”外观:

myProgressBar.Style = ProgressBarStyle.Marquee;

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

ImageAnimator.Animate方法的文档中,有一个很好的例子,可以在MSDN上加载gif并单步执行这些框架:

创建一个控件,例如“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设计器找不到图像。)

然后您的自行车响铃将出现在启动画面上。

就显示启动画面props must go to Veldmius以指出SpalshScreen属性的“最简单”方式而言:

首先在项目中添加对Microsoft.VisualBasic.dll的引用,然后将program.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秒然后我的主表单被加载。