Практическое руководство. Проверка параметров приложения

В этом разделе показано, как проверить параметры приложения перед их сохранением.

Поскольку параметры приложений являются строго типизированными, это дает некоторую уверенность в том, что пользователи не могут назначить тому или иному параметру данные неверного типа. Тем не менее, пользователь по-прежнему может попытаться присвоить значение вне допустимого диапазона, наприме указать дату рождения в будущем. ApplicationSettingsBase, родительский класс для всех классов параметров приложения, предоставляет четыре события для проверки границ. Благодаря обработке этих событий весь код проверки размещается в одном месте, а не в разных частях проекта.

Используемое событие зависит от времени, когда необходимо проверить параметры, как описано в следующей таблице.

Событие Вхождение и использование
SettingsLoaded Возникает после начальной загрузки группы свойств параметров.

Используйте это событие для проверки начальных значений для всей группы свойств перед их применением в приложении.
SettingChanging Происходит перед изменением значения одного свойства параметров.

Используйте это событие для проверки одного свойства до его изменения. Оно позволяет пользователям немедленно получить сведения о своих действиях и решениях.
PropertyChanged Происходит после изменения значения одного свойства параметра.

Используйте это событие для проверки одного свойства после его изменения. Это событие редко используется для проверки, если не требуется длительный процесс асинхронной проверки.
SettingsSaving Возникает перед сохранением группы свойств параметров.

Используйте это событие для проверки значений для всей группы свойств перед их сохранением на диске.

Как правило, в целях проверки все эти события внутри одного приложения не используются. Например, зачастую все требования проверки можно выполнить через вызов только события SettingChanging.

Обычно при обнаружении недопустимого значения обработчик событий выполняет одно из следующих действий.

  • Автоматически предоставляет заведомо правильное значение, например значение по умолчанию.

  • Повторно запрашивает сведения у пользователя серверного кода.

  • Для событий, которые были запущены до связанных с ними действий (например SettingChanging и SettingsSaving), аргумент CancelEventArgs будет применен для отмены операции.

Дополнительные сведения об обработке событий см. в разделе Общие сведения об обработчиках событий.

Следующие процедуры показывают процесс проверки подходящей даты рождения с использованием событий SettingChanging или SettingsSaving. В этих процедурах предполагается, что вы уже создали параметры приложения. В этом примере будет выполнена проверка границ для параметра с именем DateOfBirth. Дополнительные сведения о создании параметров см. в разделе Практическое руководство. Создание параметров приложения.

Получение объекта параметров приложения

  • Для получения ссылки на объект параметров приложения (экземпляр программы-оболочки) выполните одно из следующих действий:

    • Если вы создали параметры в диалоговом окне «Параметры приложения Visual Studio» в редакторе свойств, объект параметров по умолчанию, созданный для вашего языка, можно получить с помощью следующего выражения.

      Properties.Settings.Default
      
      MySettings.Default
      

      или

    • Если вы являетесь разработчиком на Visual Basic и создали параметры приложения с помощью конструктора проектов, для извлечения параметров можно использовать объект My.Settings.

      или

    • Если параметры были созданы путем наследования от ApplicationSettingsBase напрямую, необходимо создать экземпляр класса вручную.

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

В следующих процедурах предполагается, что объект параметров приложения получен путем выполнения последнего действия в этой процедуре.

Проверка параметров приложения при изменении параметра

  1. Если вы разрабатываете приложение на C#, добавьте обработчик событий для события SettingChanging в событие Load вашей формы или элемента управления.

    или

    Если вы являетесь разработчиком на Visual Basic, объявите переменную Settings с помощью ключевого слова 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. Определите обработчик событий и напишите внутри него код для выполнения проверки границ для даты рождения.

    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
    

Проверка параметров приложения в ходе сохранения

  1. Добавьте обработчик событий для события SettingsSaving в событие Load вашей формы или элемента управления.

    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
    

См. также