啟動畫面 讓使用者在應用程式初始化期間看到品牌/進度。標準模式:Program.Main 啟動主表單 → 主表單 Load 事件以 ShowDialog 顯示啟動畫面 → 啟動畫面 Timer 觸發關閉 → 主表單繼續載入。本文完整呈現三步驟代碼。
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1()); // 主表單
}
}
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
using (var splash = new Form2()) // Form2 為啟動畫面
{
splash.ShowDialog(); // 模態顯示,阻塞 Form1 Load 直到關閉
}
// 啟動畫面關閉後,繼續 Form1 初始化工作...
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
// 1. 無邊框、背景圖片
this.FormBorderStyle = FormBorderStyle.None;
this.BackgroundImage = Image.FromFile("splash.jpg"); // 專案資源或絕對路徑
this.BackgroundImageLayout = ImageLayout.Stretch;
// 2. 置中顯示
this.StartPosition = FormStartPosition.CenterScreen;
// 3. 啟動計時器 (10 秒後自動關閉)
timer1.Interval = 10000; // 10 秒
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
// 實際專案:這裡執行初始化工作 (資料庫連線、設定載入、快取預熱)
// 初始化完成可提前關閉:this.Close();
// 範例:直接關閉
this.Close();
}
private void Form2_FormClosed(object sender, FormClosedEventArgs e)
{
timer1.Stop(); // 釋放計時器資源
timer1.Dispose();
}
}
| 需求 | 實現方式 |
|---|---|
| 顯示載入進度 | 主表單初始化分步驟,透過事件/回調更新 Splash Form 上的 ProgressBar/Label |
| 非阻塞啟動畫面 | splash.Show() + 背景執行緒初始化 + Invoke 更新 UI,需處理表單關閉競態 |
| 高 DPI 相容 | 啟用 EnableVisualStyles、設定 AutoScaleMode = Dpi、背景圖提供多解析度版本 |
| 品牌動畫 | 使用 GIF (PictureBox) 或自訂繪製 OnPaint 實現淡入/淡出 |
| 最小顯示時間 | 記錄啟動畫面顯示時間,若初始化過快,Thread.Sleep 補足最小秒數 |