Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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
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 nyckelordetWithEvents
.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
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
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
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
.NET Desktop feedback