我在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启动时添加进度条或响铃进度指示器。
答案 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秒然后我的主表单被加载。