Иллюстрированный самоучитель по VB.NET

Переопределение события


Начнем с переопределения событий базового класса. Например, событие OnChange поможет предотвратить ввод в поле всего, что не является целым числом. Следующий обработчик разрешает вводить или вставлять из буфера только положительные целые числа:

1 Public Class PositivelntegerTextBox

2 Inherits System.Windows.Forms.TextBox

3 Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)

4 MyBase.OnTextChanged(e)

5 If Not (IsNumeric(Me.Text))Then

6 Me.Text - String.Empty

7 Else

8 Dim temp As Decimal

9 temp = CType(Me.Text.Decimal)

10 If temp - Math.Round(temp.0) <> 0 Then

11 Me.Text = String.Empty

12 End If



13 End If

14 End Sub

15 End Class

В строках 1 и 2 объявляется специализированная версия обычного текстового поля. Поскольку при специализации на базе наследования сохраняются все члены базового класса, которые не подверглись явным изменениям, вам не придется прибегать к услугам программы-мастера (как в VB6), чтобы решить вопрос с неизменными свойствами — например, с основным цветом. При переопределении событий в производном классе обычно вызывается обработчик базового класса, как в строке 4. Необходимость этой строки связана с тем, что мы не программируем обработку этого события от начала и до конца, а хотим воспользоваться унаследованными аспектами поведения базового класса. В строках 5-6 предотвращается ввод нечисловых данных типа 32Skiddoo. В строках 9-12 из текстового поля удаляются дробные числа; при помощи встроенной функции Round программа убеждается в том, что округленное число совпадает с исходным. Следует заметить, что простое уничтожение введенного текста выглядит несколько жестоко по отношению к пользователю. В более изощренной программе следовало бы сохранить предыдущий текст, чтобы восстановить его при необходимости. В этом случае одна ошибка ввода не будет приводить к полной потере введенных данных.

На этой стадии приведенный выше фрагмент можно откомпилировать в DLL и получить вполне работоспособный элемент. Чтобы протестировать элемент после компиляции, создайте новое приложение Windows и поместите элемент на панель элементов:



  • Выполните команду Tools > Customize Toolbox (или нажмите Ctrl+T).

  • Перейдите на вкладку .NET Framework Components.

  • Нажмите кнопку Browse и выберите DLL нужнопа^лемента (библиотека находится в подкаталоге \bin основного каталога решения).

    Элемент помещается на вкладку .NET Framework Components (рис. 8.16).





    Рис. 8.16. Нестандартный элемент на вкладке .NET Framework Components



    Рис. 8.17. Нестандартный элемент на панели элементов

    Нестандартный элемент размещается в нижней части панели (рис. 8.17). Дважды щелкните в строке Poslti velntegerTextBox, и элемент появится на форме. Обратите внимание: наш простейший элемент обладает всеми свойствами обычных текстовых полей и особенностями поведения, присущими текстовым полям в режиме конструирования. Все это было автоматически унаследовано от класса текстовых полей Windows. Forms. TextBox без малейших усилий с вашей стороны.

    Элемент, помещенный на панель элементов, остается на ней и может использоваться в будущих проектах. Чтобы удалить элемент с панели, щелкните на нем правой кнопкой мыши и выберите команду Delete.




    Содержание раздела