Поделиться через


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

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

Так как параметры приложения строго типизированы, у пользователей есть уверенность, что пользователи не могут назначать данные неправильного типа заданному параметру. Однако пользователь по-прежнему может попытаться назначить значение параметру, который выходит за пределы допустимых границ, например предоставление даты рождения, которая возникает в будущем. 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#, в событии Load вашей формы или элемента управления добавьте обработчик для события SettingChanging.

    -или-

    Если вы являетесь разработчиком 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. В событии 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
    

См. также