* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Создание производных элементов управления
8 февраля 2009
Производный элемент управления содержит всю функциональность своего базово- го класса, а также ряд дополнительных возможностей. Чтобы создать производный элемент управления, необходимо указать для него базовый класс, например класс стандартного элемента управления Windows Forms. Новый элемент управления, созданный таким образом, сохранит внешний вид и поведение своего предка. Ниже показан пример создания элемента управления, производного от Button; Visual Basic .NET
Public Class myButton Inherits System. Windows. Forms. Button Остальной код опущен. End Class Visual C# public class myButton : System. Windows. Forms. Button { // Остальной код опущен. ! Реализация новых возможностей в производных элементах управления Как правило, к производным элементам управления прибегают, когда требуется ре- ализовать в них дополнительные функции, отсутствующие у стандартных элемен- тов управления Windows Forms. Для этого к производным элементам управления добавляют новый код либо переопределяют члены, унаследованные от базового класса. Предположим, что разработчику требуется создать текстовое поле, куда пользователь сможет вводить только числа. Для этого необходимо переопределить метод OnKeyPress следующим образом: Visual Basic .NET Public Class NumberBox Inherits System. Windows. Forms. TextBox Protected Overrides Sub CmKeyPress(ByVal e As KeyPressEventArgs) If Char.IsNumber(e.KeyChar) = False Then e. Handled = True End If End Sub End Class Visual C# public class NumberBox : System.Windows.Forms.TextBox protected override void QnKeyPress(KeyPressEventArgs e) if (char.IsNumber(e.KeyChar) =- false) e.Handled = true; \ Модификация внешнего вида существующих элементов управления Другая причина, по которой создают производные элементы управления, — их не- стандартный внешний вид. Чтобы изменить стиль оформления существующего эле- мента управления, переопределите метод OnPaint, поместив в него собственный код. Например, чтобы изменить форму элемента управления, установите соответствую- щим образом его свойство Region в методе OnPaint. Класс Region, подобно Graphics- Path, описывает область экрана заданной формы, его получают из класса Graphics- Path. Так, можно сгенерировать класс GraphicsPath, представляющий форму вашего элемента управления, создать на его основе объект Region и поместить тот в соот- ветствующее свойство элемента управления. Этот прием иллюстрируется на при- мере создания кнопки в форме текста: Visual Basic .NET Public Class WowButton Inherits System.Windows,Forms.Buttor Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs) Dim rnyPath As New Drawing2D.GraphicsPath() 1 Создать объект GraphicsPath и установить свойства FontFamily и FontStyle элемента управления так, чтобы GraphicsPath представлял контуры строки символов размером 72 пункта. myPatn.AddString("Wow!", Font.FontFamily, Font.Style, 72, New _ PointFCO, 0). StringFormat.GenericDefault) Создать на основе GraphicsPath новый объект Region. Dim myRegion As New Region(myPath) Поместить новый объект Region в одноименное свойство элемента управления, Me.Region = myRegion End Sub End Class Visual C# public class WowButton : System.Windows.Forms.Button protected override void OnPaintfPaintEventArgs pe) ; System. Drawing. Drawing2D.GraphicsPath niyPath = new System.Drawing.Drawing2D.GraphicsPath(): // Следующая команда устанавливает свойства FontFarriily л FontStyln // элемента управления гак, чтобы объект GraphicsPath представлял // контур^ строки символов размером 72 пункта. Учтите: в Си необходимо // явно преобразовать значение Font.Style в целое число, myPath.AddStringC'Wow!", Font.FontFamily, (int)Font.Style. 72. new PointFfQ, 0), StringFormat.GenericDefaiilt): // Создать на основе GraphicsPath новый объект Region. Region rcyRegion = new Region(myPath); // Поместить новый объект Region в одноименное свойство // элемента управления. this.Region ~ myRegion; : ! Заметьте; WowBulton — это не прямоугольная кнопка с прозрачным фоном, ото- бражающая крупные буквы, она действительно имеет форму букв, составляющих слово «Wow!». Чтобы ее щелкнуть, необходимо попасть в область, ограниченную контуром букв. Сходным образом изменяют форму обычных элементов управле- ния, чтобы получить элементы пользовательского интерфейса с нестандартным видом. Примечание Прорисовка некоторых элементов управления, таких, как Text Box, вы- полняется не самим элементом управления, а формой, на которой он располагает- ся. Такие элементы управления никогда не генерируют событие Paint, поэтому от- вечающий за визуализацию код. помещенный в обработчик этого события, вызван не будет. > Создание производного элемента управления 1. Объявите новый класс элемента управления на основе существующего класса элемента управления. 2. Реализуйте все необходимые нестандартные возможности и добавьте код, фор- мирующий интерфейс производного элемента управления.