我尝试首先显示启动画面,然后在启动后显示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());
}
}
答案 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