XAF自定義啟動頁

非動ご發表於2020-12-19

本主題是官網指導教程 Use a Custom Class to Show a Splash Form 的補充。演示瞭如何建立自定義啟動頁(splash form)並使用。

具體步驟

1. 建立一個Splash Form窗體

右鍵解決方案中的WinForms應用工程(xxx.win),在彈出選單中選擇"新增"->“新建項”。

步驟1
在彈出的窗體中點選 “Windows Form” -> “窗體(Windows 窗體)”,在窗體的最下方的名稱中輸入檔名"SplashScreenForm.cs",隨後點選右下角的"新增"按鈕。

步驟2
此時在WinForms資料夾中已經可以看到剛剛建立的SplashScreenForm.cs檔案。

2.建立繼承 ISplash 介面的類。

右鍵解決方案中的WinForms應用工程(xxx.win),在彈出選單中選擇"新增"->“類”。

在彈出的窗體中輸入檔名稱"MySplash.cs",然後點選 “新增” 按鈕。

在WinForms應用工程(xxx.win)中雙擊 MySplash.cs 檔案。將檔案程式碼替換成以下的內容:

using DevExpress.ExpressApp.Win;
//...
public class MySplash : ISplash {
    static private SplashScreenForm form;
    private static bool isStarted = false;
    public void Start() {
        isStarted = true;
        form = new SplashScreenForm();
        form.Show();
        System.Windows.Forms.Application.DoEvents();
    }
    public void Stop() {
        if(form != null) {
            form.Hide();
            form.Close();
            form = null;
        }
        isStarted = false;
    }
    public void SetDisplayText(string displayText) {
    }
    public bool IsStarted {
        get { return isStarted; }
    }
}

3. 引用MySplash類

訪問 WinApplication.cs 檔案。將SplashScreen屬性設定為新的 MySplash 類例項。

using System;
// ……
namespace MySolution.Win {
    public partial class MySolutionWindowsFormsApplication : WinApplication {
        public MySolutionWindowsFormsApplication() {
			InitializeComponent();
            SplashScreen = new MySplash();
        }
    }
}

4. 在設計器中自定義啟動介面

雙擊 SplashScreenForm.cs 進入設計器。初始化的窗體是帶有邊框的,可以在屬性皮膚中設定 “FormBorderStyle” 為 None去除邊框。

在這裡插入圖片描述
點選"工具箱",分批次拖拽兩個"Label"和一個"PictureBox"外掛進入設計器中,完成介面的設計。

在這裡插入圖片描述
此時點選屬性皮膚的標題,應該出現以下所示的4個介面結構單位。要實現官網中展示的最終效果,需要在幾個介面結構中調整必要的引數。

在這裡插入圖片描述

5. 實現顯示載入進度資訊的功能

為了實現顯示載入進度資訊的功能,請在 MySplash 類中實現 ISupportUpdateSplash 介面,並將 UpdateInfo 方法新增到 SplashScreenForm 類中。

public class MySplash : ISplash, ISupportUpdateSplash {
    // ...
    public void UpdateSplash(string caption, string description, params object[] additionalParams) {
        form.UpdateInfo(description);
    }
}
// ...
public partial class SplashScreenForm : Form {
    // ...
    internal void UpdateInfo(string info) {
        label2.Text = info;
    }
}

相關文章