如何在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启动时添加进度条或环形进度指示器。
默认控制集中没有特定的"周期"进度环控制,所以我认为您有两个选项:
添加一个标准的水平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秒的动画进度,然后我的主窗体加载了。