Dela via


Så här: Verifiera programinställningar

Det här avsnittet visar hur du validerar programinställningar innan de sparas.

Eftersom programinställningarna är starkt inskrivna kan du vara säker på att användarna inte kan tilldela data av en felaktig typ till en viss inställning. En användare kan dock fortfarande försöka tilldela ett värde till en inställning som ligger utanför godkända gränser, till exempel genom att ange ett födelsedatum som inträffar i framtiden. ApplicationSettingsBase, den överordnade klassen för alla klasser av programinställningar, exponerar fyra händelser för att aktivera sådan gränskontroll. Om du hanterar dessa händelser placeras all valideringskod på en enda plats i stället för att sprida den i hela projektet.

Vilken händelse du använder beror på när du behöver verifiera inställningarna, enligt beskrivningen i följande tabell.

Händelse Förekomst och användning
SettingsLoaded Inträffar efter den första laddningen av en egenskapsgrupp för inställningar.

Använd den här händelsen för att verifiera initiala värden för hela egenskapsgruppen innan de används i programmet.
SettingChanging Inträffar innan värdet för en enskild inställningsegenskap ändras.

Använd den här händelsen för att verifiera en enskild egenskap innan den ändras. Den kan ge omedelbar feedback till användarna om deras åtgärder och val.
PropertyChanged Inträffar när värdet för en enskild inställningsegenskap har ändrats.

Använd den här händelsen för att verifiera en enskild egenskap när den har ändrats. Den här händelsen används sällan för validering om inte en lång, asynkron valideringsprocess krävs.
SettingsSaving Inträffar innan egenskapsgruppen för inställningar lagras.

Använd den här händelsen för att verifiera värden för hela egenskapsgruppen innan de sparas på disken.

Normalt använder du inte alla dessa händelser i samma program i valideringssyfte. Det är till exempel ofta möjligt att uppfylla alla valideringskrav genom att endast hantera den SettingChanging händelsen.

En händelsehanterare utför vanligtvis någon av följande åtgärder när den identifierar ett ogiltigt värde:

  • Tillhandahåller automatiskt ett värde som är känt för att vara korrekt, till exempel standardvärdet.

  • Frågar användaren av serverkoden igen om information.

  • För händelser som genereras före deras associerade åtgärder, till exempel SettingChanging och SettingsSaving, använder argumentet CancelEventArgs för att avbryta åtgärden.

För mer information om händelsehantering, se översikten över händelsehanterare.

Följande procedurer visar hur du testar för ett giltigt födelsedatum med antingen SettingChanging eller SettingsSaving händelsen. Procedurerna skrevs under antagandet att du redan har skapat dina programinställningar. I det här exemplet utför vi gränskontroll på en inställning med namnet DateOfBirth. Mer information om hur du skapar inställningar finns i Så här: Skapa programinställningar.

Hämta programmets inställningsobjekt

  • Hämta en referens till programmets inställningsobjekt (wrapper-instansen) genom att slutföra något av följande punktobjekt:

    • Om du har skapat inställningarna med hjälp av dialogrutan Programinställningar för Visual Studio i Egenskapsredigerarenkan du hämta standardinställningsobjektet som genererats för ditt språk via följande uttryck.

      Properties.Settings.Default
      
      MySettings.Default
      

      -eller-

    • Om du är visual basic-utvecklare och har skapat dina programinställningar med hjälp av Project Designer kan du hämta inställningarna med hjälp av objektet My.Settings.

      -eller-

    • Om du har skapat inställningarna genom att härleda från ApplicationSettingsBase direkt måste du instansiera klassen manuellt.

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

Följande procedurer skrevs under antagandet att programmets inställningsobjekt erhölls genom att slutföra det sista punktobjektet i den här proceduren.

Verifiera programinställningar när en inställning ändras

  1. Om du är en C#-utvecklare, lägg till en händelsehanterare för SettingChanging-händelsen i formulärets eller kontrollens Load-händelse.

    -eller-

    Om du är Visual Basic-utvecklare bör du deklarera variabeln Settings med hjälp av nyckelordet WithEvents.

    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. Definiera händelsehanteraren och skriv koden inuti den för att utföra gränskontroll av födelsedatumet.

    private void MyCustomSettings_SettingChanging(Object sender, SettingChangingEventArgs e)
    {
        if (e.SettingName.Equals("DateOfBirth"))
        {
            var newDate = (DateTime)e.NewValue;
            if (newDate > DateTime.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
    

Verifiera programinställningar när en Spara inträffar

  1. I formuläret eller kontrollens Load händelse lägger du till en händelsehanterare för SettingsSaving händelsen.

    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. Definiera händelsehanteraren och skriv koden inuti den för att utföra gränskontroll av födelsedatumet.

    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
    

Se även