Практическое руководство. Проверка параметров приложенияHow to: Validate Application Settings

В этом разделе показано, как проверить параметры приложения перед их сохранением.This topic demonstrates how to validate application settings before they are persisted.

Поскольку параметры приложений являются строго типизированными, это дает некоторую уверенность в том, что пользователи не могут назначить тому или иному параметру данные неверного типа.Because application settings are strongly typed, you have some confidence that users cannot assign data of an incorrect type to a given setting. Тем не менее, пользователь по-прежнему может попытаться присвоить значение вне допустимого диапазона, наприме указать дату рождения в будущем.However, a user still may attempt to assign a value to a setting that falls outside of acceptable bounds—for example, supplying a birth date that occurs in the future. ApplicationSettingsBase, родительский класс всех классов параметров приложения предоставляет четыре события, позволяющие проверить такие границы.ApplicationSettingsBase, the parent class of all application settings classes, exposes four events to enable such bounds checking. Благодаря обработке этих событий весь код проверки размещается в одном месте, а не в разных частях проекта.Handling these events puts all of your validation code in a single location, rather than scattering it throughout your project.

Используемое событие зависит от времени, когда необходимо проверить параметры, как описано в следующей таблице.The event you use depends upon when you need to validate your settings, as described in the following table.

событиеEvent Вхождение и использованиеOccurrence and use
SettingsLoaded Возникает после начальной загрузки группы свойств параметров.Occurs after the initial loading of a settings property group.

Используйте это событие для проверки начальных значений для всей группы свойств перед их применением в приложении.Use this event to validate initial values for the entire property group before they are used within the application.
SettingChanging Происходит перед изменением значения одного свойства параметров.Occurs before the value of a single settings property is changed.

Используйте это событие для проверки одного свойства до его изменения.Use this event to validate a single property before it is changed. Оно позволяет пользователям немедленно получить сведения о своих действиях и решениях.It can provide immediate feedback to users regarding their actions and choices.
PropertyChanged Происходит после изменения значения одного свойства параметра.Occurs after the value of a single settings property is changed.

Используйте это событие для проверки одного свойства после его изменения.Use this event to validate a single property after it is changed. Это событие редко используется для проверки, если не требуется длительный процесс асинхронной проверки.This event is rarely used for validation unless a lengthy, asynchronous validation process is required.
SettingsSaving Возникает перед сохранением группы свойств параметров.Occurs before the settings property group is stored.

Используйте это событие для проверки значений для всей группы свойств перед их сохранением на диске.Use this event to validate values for the entire property group before they are persisted to disk.

Как правило, в целях проверки все эти события внутри одного приложения не используются.Typically, you will not use all of these events within the same application for validation purposes. Например, часто можно выполнить все требования проверки, обрабатывая только SettingChanging событие.For example, it is often possible to fulfill all validation requirements by handling only the SettingChanging event.

Обычно при обнаружении недопустимого значения обработчик событий выполняет одно из следующих действий.An event handler generally performs one of the following actions when it detects an invalid value:

  • Автоматически предоставляет заведомо правильное значение, например значение по умолчанию.Automatically supplies a value known to be correct, such as the default value.

  • Повторно запрашивает сведения у пользователя серверного кода.Re-queries the user of server code for information.

  • Для событий, вызванных до связанных действий, таких SettingChanging как SettingsSavingи, использует CancelEventArgs аргумент для отмены операции.For events raised before their associated actions, such as SettingChanging and SettingsSaving, uses the CancelEventArgs argument to cancel the operation.

Дополнительные сведения об обработке событий см. в разделе Общие сведения об обработчиках событий.For more information about event handling, see Event Handlers Overview.

В следующих процедурах показано, как проверить допустимость даты рождения с помощью либо SettingChanging SettingsSaving события, либо.The following procedures show how to test for a valid birth date using either the SettingChanging or the SettingsSaving event. В этих процедурах предполагается, что вы уже создали параметры приложения. В этом примере будет выполнена проверка границ для параметра с именем DateOfBirth.The procedures were written under the assumption that you have already created your application settings; in this example, we will perform bounds checking on a setting named DateOfBirth. Дополнительные сведения о создании параметров см. в разделе как Создание параметровприложения.For more information about creating settings, see How to: Create Application Settings.

Получение объекта параметров приложенияTo obtain the application settings object

  • Для получения ссылки на объект параметров приложения (экземпляр программы-оболочки) выполните одно из следующих действий:Obtain a reference to the application settings object (the wrapper instance) by completing one of the following bulleted items:

    • Если вы создали параметры в диалоговом окне «Параметры приложения Visual Studio» в редакторе свойств, объект параметров по умолчанию, созданный для вашего языка, можно получить с помощью следующего выражения.If you created your settings using the Visual Studio Application Settings dialog box in the Property Editor, you can retrieve the default settings object generated for your language through the following expression.

      Configuration.Settings.Default
      
      MySettings.Default
      

      -или--or-

    • Если вы являетесь разработчиком на Visual Basic и создали параметры приложения с помощью конструктора проектов, для извлечения параметров можно использовать объект My.Settings.If you are a Visual Basic developer and you created your application settings using the Project Designer, you can retrieve your settings by using the My.Settings Object.

      -или--or-

    • Если вы создали параметры, производя от ApplicationSettingsBase напрямую, необходимо создать экземпляр класса вручную.If you created your settings by deriving from ApplicationSettingsBase directly, you need to instantiate your class manually.

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

В следующих процедурах предполагается, что объект параметров приложения получен путем выполнения последнего действия в этой процедуре.The following procedures were written under the assumption that the application settings object was obtained by completing the last bulleted item in this procedure.

Проверка параметров приложения при изменении параметраTo validate Application Settings when a setting is changing

  1. Если вы являетесь C# разработчиком, в форме или Load событии элемента управления добавьте обработчик SettingChanging событий для события.If you are a C# developer, in your form or control's Load event, add an event handler for the SettingChanging event.

    -или--or-

    Если вы являетесь разработчиком на Visual Basic, объявите переменную Settings с помощью ключевого слова WithEvents.If you are a Visual Basic developer, you should declare the Settings variable using the WithEvents keyword.

    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. Определите обработчик событий и напишите внутри него код для выполнения проверки границ для даты рождения.Define the event handler, and write the code inside of it to perform bounds checking on the birth date.

    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
    

Проверка параметров приложения в ходе сохраненияTo validate Application Settings when a Save occurs

  1. В форме или Load событии элемента управления добавьте обработчик событий SettingsSaving для события.In your form or control's Load event, add an event handler for the SettingsSaving event.

    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. Определите обработчик событий и напишите внутри него код для выполнения проверки границ для даты рождения.Define the event handler, and write the code inside of it to perform bounds checking on the birth date.

    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
    

См. такжеSee also