在加载主窗体期间显示启动画面

时间:2015-09-05 23:45:49

标签: c# winforms splash-screen

我尝试首先显示启动画面,然后在启动后显示MainForm。但是我在启动画面中的进度条没有到达栏的末尾。程序继续运行而不起作用。

如何在加载主窗体期间显示启动画面?

我的代码就是这样:

public partial class SplashForm : Form
{
    public SplashForm()
    { 
        InitializeComponent();
    }
    private void SplashForm_Load(object sender, EventArgs e)
    {
        timer1.Enabled = true;
        timer1.Start();
        timer1.Interval = 1000;
        progressBar1.Maximum = 10;
        timer1.Tick += new EventHandler(timer1_Tick);
    }
    public void timer1_Tick(object sender, EventArgs e)
    {
        if (progressBar1.Value != 10)
        {
            progressBar1.Value++;
        }
        else
        {
            timer1.Stop();
            Application.Exit();
        }
    }     
}

以下是MainForm的代码的第一部分:

public partial class MainForm : Form
{
    public MainForm()
    {
        InitializeComponent();
        Application.Run(new SplashForm());
    }
}

1 个答案:

答案 0 :(得分:6)

创建启动画面有不同的方法。最好将显示和关闭启动画面的逻辑与主窗体的逻辑分开。

为此,您可以创建LoadCompleted事件,然后在Program课程中订阅该事件,并在那里显示并关闭您的初始屏幕。

这是我上面描述的实现:

1-在MainForm中,添加LoadCompleted事件,然后重写OnLoad方法以引发事件。 (可能Shown事件适用于我们的自定义事件。)

public event EventHandler LoadCompleted;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    this.OnLoadCompleted(EventArgs.Empty);
}
protected virtual void OnLoadCompleted(EventArgs e)
{
    var handler = LoadCompleted;
    if (handler != null)
        handler(this, e);
}
private void MainForm_Load(object sender, EventArgs e)
{
    //Just for test, you can make a delay to simulate a time-consuming task
    //In a real application here you load your data and other settings
}

2-在Program课程中,显示​​SplashForm,然后订阅LoadCompleted的{​​{1}}个事件并显示MainForm,然后在MainForm中},关闭LoadCompleted

SplashForm