Переопределение события
Начнем с переопределения событий базового класса. Например, событие 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).