Добавление новых событий. Добавление новых свойств.
Добавить поддержку нового события в элемент ничуть не сложнее, чем включить обработчик события в класс (эта тема рассматривалась в главе 6). Предположим, каждый раз, когда пользователь вводит нечто отличное от положительного целого числа, элемент должен инициировать событие BadDataEntered.
Public Class PositivelntegerTextBox Inherits System.Windows.Forms.TextBox Public Event BadDataEntered(ByVal Sender As Object, _ ByVal e As EventArgs) Protected Overrides Sub OnTextChanged(ByVal e As EventArgs) MyBase.OnTextChanged(e) If Not (IsNumeric(Me.Text)) Then Me.Text = String.Empty RaiseEvent BadDataEntered(Me. New System.EventArgs()) Else Dim temp As Decimal temp = CType(Me.Text,Decimal) If temp = Math.Round(temp.0) < > 0 Then Me.Text = String.Empty RaiseEvent BadDataEntered(Me, New System.EventArgs()) End If End If End Sub End Class
В элементах VB существует понятие события по умолчанию (default event). Событие по умолчанию срабатывает автоматически при двойном щелчке на экземпляре элемента в дизайнере форм. Событие по умолчанию задается при помощи специального атрибута. Атрибуты соответствуют экземплярам класса System.Attribute; атрибут DefaultEvent входит в пространство имен System.ComponentModel.
В программе атрибуты заключаются в угловые скобки, а при установке атрибута DefaultEvent указывается имя события в кавычках. Чтобы назначить событие BadDataEntered событием по умолчанию для данного элемента, приведите начало класса к следующему виду:
Imports System.ComponentModel <DefaultEvent("BadDataEntered") > Public Class _ PositivelntegerTextBox Inherits System.Windows.Forms.TextBox
Добавление новых свойств
На следующем шаге класс будет дополнен свойствами MinValue и MaxValue. Программная реализация этих свойств выглядит весьма прямолинейно. При создании экземпляра переменным присваиваются значения 1 и максимальное значение типа Long соответственно. В дальнейшем необходимо проследить за тем, чтобы свойство MinValue не оказалось меньше 1, а свойство MaxValue не превышало предельной величины:
Private m_Min As Long = 1 Private m_Max As Long = Long.MaxValue Public Property MinValue()As Long Get Return m_Min End Get SetCByVal Value As Long) m_Min = Math.Maxd,Value) End Set End Property Public Property MaxValue()As Long Get Return m_Max End Get Set(ByVal Value As Long) m_Max =Math.Min(m_Min.Value) End Set End Property
Если включить этот код в проект и откомпилировать его, свойство будет поддерживаться элементом, но не будет отображаться в окне свойств. Проблема решается установкой атрибута Browsable для имени свойства:
<Browsable(True)> Public Property MinValue