Компоненты Windows Forms. Компонент ErrorProvider

Содержимое этого шага базируется на:

  • https://metanit.com/sharp/windowsforms/4.22.php
  • https://it.wikireading.ru/31327
  • http://programming-lang.com/ru/comp_programming/troelsen/0/j1880.html
  •    
    На этом шаге мы рассмотрим назначение и использование этого компонента.

       
    В большинстве приложений Windows Forms приходится, так или иначе, проверять правильность пользовательского ввода. Это особенно касается диалоговых окон, поскольку вы должны
    информировать пользователя о том, что он сделал ошибку, прежде чем пользователь продолжит ввод. Компонент ErrorProvider может использоваться для того, чтобы обеспечить
    пользователю визуальные подсказки в отношении ошибок ввода.

       
    Свойства этого компонента приведены на рисунке 1.


    Рис.1. Свойства компонента ErrorProvider

       
    Среди его свойств можно выделить следующие:

    • BlinkRate - задает частоту мигания значка ошибки;
    • BlinkStyle - определяет, когда значок ошибки будет мигать. Значение этого свойства устанавливается путем выбора значения из следующих возможностей (рисунок 2):
      Рис.2. Значения свойства BlinkStyle

      • AlwaysBlink - заставляет пиктограмму ошибки "мигать", когда ошибка отображается впервые или когда элементу управления назначается строка новой ошибки, а пиктограмма
        ошибки уже отображается;
      • BlinkIfDifferentError - заставляет пиктограмму ошибки "мигать", когда пиктограмма ошибки уже отображается, но элементу управления назначается строка новой ошибки;
      • NeverBlink - индикатор того, что пиктограмма ошибки не должна "мигать" никогда;
    • Icon - устанавливает сам значок ошибки. По умолчанию это красный кружок с восклицательным знаком, но можно установить любую другую иконку.

       
    Рассмотрим пример использования этого компонента.

       
    Расположим на форме два компонента TextBox, которые будут использоваться для ввода имени и возраста. Добавим к ним компонент ErrorProvider, которому
    "поручим" отвечать за правильность ввода данных. Форма в режиме конструктора приведена на рисунке 3.


    Рис.3. Форма в режиме конструктора

       
    Прежде, чем переходить к написанию обработчиков, отметим, что практически у каждого компонента есть свойство CausesValidation, которое "отвечает" за возможность компонента
    вызывать проверку ввода данных, при необходимости реализации такой проверки. Это возможно, когда свойство CausesValidation имеет значение True. Компоненты TextBox
    имеют отмеченное свойство, и по умолчению его значение как раз равно True.

       
    Если оставить у этих компонентов значения по умолчанию, то каждый из них при получении им фокуса ввода заставит остальные элементы управления в форме выполнить проверку ввода.
    При получении фокуса ввода проверяющим элементом управления генерируются события Validating и Validated для каждого элемента управления. В контексте обработчика события
    Validating вы должны конфигурировать соответствующий ErrorProvider. Также можно, но необязательно, обработать событие Validated, чтобы определить, когда элемент
    управления закончит цикл проверки.

       
    Следовательно,

    • Validated - событие, генерируемое тогда, когда элемент управления заканчивает выполнение программной логики проверки ввода;
    • Validating - событие, генерируемое тогда, когда элемент управления проверяет пользовательский ввод (например, когда элемент управления утрачивает фокус ввода).

       
    Таким образом, обработчики этих событий для компонентов TextBox могуть быть следующими:

    // Проверка на правильность ввода имени пользователя
    private: System::Void textBox1_Validating(System::Object^  sender, 
         System::ComponentModel::CancelEventArgs^  e) {
    	 if (textBox1->Text->Length == 0)
           {
    		// Связывание компонента и выводимой подсказки
                 errorProvider1->SetError(textBox1, "Не указано имя!");
           }
           else if (textBox1->Text->Length < 4)
           {
    		// Связывание компонента и выводимой подсказки
                 errorProvider1->SetError(textBox1, "Слишком короткое имя!");
           }
           else
           {
    		// Очистка параметров компонента
                 errorProvider1->Clear();
           }
     }
    // Проверка на правильность ввода возраста
    private: System::Void textBox2_Validating(System::Object^  sender, 
       System::ComponentModel::CancelEventArgs^  e) {
    	 int age = 0;
    	 if (textBox2->Text->Length == 0)
    	 {
    		 // Связывание компонента и выводимой подсказки
    		 errorProvider1->SetError(textBox2, "Не указан возраст!");
    	 }
    	 else 
    		 // Пытаемся перевести строку в число
    		 if (!System::Int32::TryParse(textBox2->Text, age))
    		 {
    			 // Связывание компонента и выводимой подсказки
    			 errorProvider1->SetError(textBox2, "Некорректный возраст!");
    		 }
    		 else
    		 {
    			 // Очистка параметров компонента
    			 errorProvider1->Clear();
    		 }
     }
    

    Архив проекта можно взять здесь.

       
    Здесь:

    • метод SetError() задает строку описания ошибки для указанного элемента управления, а
    • метод Clear() очищает все параметры, связанные с этим компонентом.

       
    В приведенном приложении есть небольшая деталь - валидация элемента будет происходить, когда мы завершим ввод и перейдем на другой элемент. Если же нам надо валидировать элемент по мере ввода, то тогда мы
    можем обрабатывать событие TextChanged у тех же текстовых полей.

       
    Результат работы приложения изображен на рисунке 4.


    Рис.4. Результат работы приложения

       
    На следующем шаге мы рассмотрим компонент MonthCalendar.



    Вы можете оставить комментарий, или Трекбэк с вашего сайта.

    Оставить комментарий