HOW TO:驗證應用程式設定

這個範例示範如何在保存應用程式設定之前先對它們進行驗證。

由於應用程式設定屬於強型別 (Strongly Typed),所以,在某種程度上,您可以信任使用者不會將錯誤型別的資料指派給指定的設定。 但是,使用者仍然可以嘗試將落於可接受界限之外的值指派給設定,例如提供一個未來的出生日期。 所有應用程式設定類別的父類別 ApplicationSettingsBase,會公開四個事件以啟用如範圍檢查等工作。 處理這些事件時會將所有驗證程式碼置於單一位置,而不是將它四散於專案各處。

所使用的事件是取決於您需要驗證設定的時機,如以下表所示。

事件

發生時機和使用方法

SettingsLoaded

發生於初始載入設定屬性群組之後。

若要先驗證全部屬性群組的初始值然後才在應用程式中使用此值,請使用這個事件。

SettingChanging

發生於變更單一設定屬性值之前。

若要在變更單一屬性之前先進行驗證,請使用這個事件。 它可以提供使用者與其動作和選擇相關的即時回應。

PropertyChanged

發生於變更單一設定屬性值之後。

若要在變更單一屬性之後才進行驗證,請使用這個事件。 除非是需要冗長的非同步驗證過程,否則驗證時鮮少使用這個事件。

SettingsSaving

發生於儲存設定屬性群組之前。

若要先驗證全部屬性群組的值然後才將它們保存於磁碟中,請使用這個事件。

進行驗證時這些事件通常不會在相同應用程式內全部同時使用。 例如,只處理 SettingChanging 事件即可能符合所有驗證需求。

當事件處理常式偵測到無效值時,它通常會執行下列其中一項動作:

  • 自動提供已知的正確值,例如預設值。

  • 重新詢問伺服端程式碼的使用者以取得資訊。

  • 如果是在執行相關動作前即先引發的事件,例如 SettingChangingSettingsSaving,會使用 CancelEventArgs 引數來取消作業。

如需事件處理的詳細資訊,請參閱 事件處理常式概觀 (Windows Form)

在下列程序中,示範了如何使用 SettingChangingSettingsSaving 事件來測試是否為有效的出生日期。 此程序的假設是您已經建立了應用程式設定,而且在這個範例中,將會對名為 DateOfBirth 的設定執行範圍檢查。 如需建立設定的詳細資訊,請參閱 HOW TO:建立應用程式設定

若要取得應用程式設定物件

  • 請完成下列其中一項,以取得應用程式設定物件 (包裝函式執行個體) 的參考:

    • 如果您是使用 [屬性編輯器] 中的 [Visual Studio 應用程式設定] 對話方塊來建立設定,則可利用以下運算式擷取配合程式語言而產生的預設設定物件。

      Configuration.Settings.Default 
      
      MySettings.Default 
      

      -或-

    • 如果您是 Visual Basic 開發人員而且使用專案設計工具來建立應用程式設定,則可使用 My.Settings 物件 (Visual Basic) 擷取設定。

      -或-

    • 如果您是藉由直接從 ApplicationSettingsBase 衍生的方式來建立設定,則需要手動產生 (Instantiate) 類別。

      MyCustomSettings settings = new MyCustomSettings();
      
      Dim Settings as New MyCustomSettings()
      

下列程序的依據假設是,您採取了本程序的最後一個項目來取得應用程式設定物件。

若要在設定變更時驗證應用程式設定

  1. 如果您是 C# 開發人員,請在表單或控制項的 Load 事件中加入 SettingChanging 事件的事件處理常式。

    -或-

    如果您是 Visual Basic 開發人員,則應使用 WithEvents 關鍵字宣告 Settings 變數。

    public void Form1_Load(Object sender, EventArgs e) 
    {
        settings.SettingChanging += new SettingChangingEventHandler(MyCustomSettings_SettingChanging);
    }
    
    Public Sub Form1_Load(sender as Object, e as EventArgs)
        AddHandler settings.SettingChanging, AddressOf MyCustomSettings_SettingChanging
    End Sub 
    
  2. 定義事件處理常式,然後在其中撰寫程式碼以根據出生日期執行範圍檢查。

    private void MyCustomSettings_SettingChanging(Object sender, SettingChangingEventArgs e)
    {
        if (e.SettingName.Equals("DateOfBirth")) {
            Date newDate = (Date)e.NewValue;
            If (newDate > Date.Now) {
                e.Cancel = true;
                // Inform the user.
            }
        }
    }
    
    Private Sub MyCustomSettings_SettingChanging(sender as Object, e as SettingChangingEventArgs) Handles Settings.SettingChanging
        If (e.SettingName.Equals("DateOfBirth")) Then
            Dim NewDate as Date = CType(e.NewValue, Date)
            If (NewDate > Date.Now) Then
                e.Cancel = True
                ' Inform the user.
            End If
        End If
    End Sub
    

若要在發生儲存行為時驗證應用程式設定

  1. 請在表單或控制項的 Load 事件中加入 SettingsSaving 事件的事件處理常式。

    public void Form1_Load(Object sender, EventArgs e) 
    {
        settings.SettingsSaving += new SettingsSavingEventHandler(MyCustomSettings_SettingsSaving);
    }
    
    Public Sub Form1_Load(Sender as Object, e as EventArgs)
        AddHandler settings.SettingsSaving, AddressOf MyCustomSettings_SettingsSaving
    End Sub
    
  2. 定義事件處理常式,然後在其中撰寫程式碼以根據出生日期執行範圍檢查。

    private void MyCustomSettings_SettingsSaving(Object sender, SettingsSavingEventArgs e)
    {
        if (this["DateOfBirth"] > Date.Now) {
            e.Cancel = true;
        }
    }
    
    Private Sub MyCustomSettings_SettingsSaving(Sender as Object, e as SettingsSavingEventArgs)
        If (Me["DateOfBirth"] > Date.Now) Then
            e.Cancel = True
        End If
    End Sub
    

請參閱

工作

HOW TO:建立應用程式設定

其他資源

在 Windows Form 中建立事件處理常式