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