Имя Пароль
Зарегистрироваться


* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна! RSS



Создание формируемых элементов управления
8 февраля 2009

Формируемые элементы управления предоставляют максимум возможностей по на-
стройке и управлению своей функциональностью, но их разработка занимает боль-
ше всего времени. Поскольку базовый класс Control не предоставляет своим потом-
кам даже базового графического интерфейса, разработчику придется самостоятель-
но писать весь код, формирующий облик такого элемента управления. Если интер-
фейс сложный, его создание занимает львиную долю цикла разработки элемента
управления.
Процесс визуализации элемента управления в клиентской области формы на-
зывается прорисовкой. Получив команду на прорисовку, элемент управления гене-
рирует событие Paint, при этом исполняются все обработчики события Paint. У клас-
са Control обработчиком по умолчанию для события Paint является метод OnPaint.
Метод OnPaint принимает единственный аргумент — экземпляр класса Paint-
EventArgs, содержащий информацию клиентской области элемента управления. Сто-
ит обратить внимание на два члена этого класса — Graphics и Clip Rectangle.
Graphics — это объект типа Graphics, представляющий клиентскую область эле-
мента управления. Ссылка на него необходима для формирования изображения
элемента управления. ClipRectangle — прямоугольник, представляющий доступную
клиентскую область элемента управления. При первом отображении элемента упра-
вления ClipRectangle ограничивает занятую им область. Если она перекрывается с
другими элементам управления, данный элемент может оказаться частично или
полностью скрытым. При повторной его прорисовке ClipRectangle представляет
только видимую область, которая должна быть перерисована. Именно поэтому не
рекомендуется определять размеры элемента управления по объекту ClipRectangle.
для этой цели следует применять свойство Size.
По умолчанию координаты отсчитываются от верхнего левого угла элемента уп-
равления, в котором располагается условная точка начала координат (0,0), они ис-
числяются в пикселах. Следующий пример демонстрирует простой метод OnPaint,
выполняющий прорисовку нестандартного элемента управления в виде красного
эллипса:
Visual Basic .NET
Этот пример предполагает наличие оператора Imports System.Drawing
Protected Overrides Sub OnPaint(ByVal pe As PaintEventArgs)
Dim aBrush As New SolidBrush(Color.Red)
Dim clientRectangle As New Rectangle(New Point(0,0), Me.Size)
pe.Graphics.FillEllipse(aBrush, clientRectangle)
End Sub
Visual C#
// Этот пример предполагает наличие оператора Imports System.Drawing
protected override void OnPaint(PaintEventArgs e)
{
Brush aBrush = new SolidBrush(Color.Red);
Rectangle clientRectangle = new
Rectangle(new Point(O.O), this.Size);
e.Graphics.FillEllipse(aBrush, clientRectangle);
При изменении размеров элемента управления автоматически изменяется раз-
мер ClipRectangle, но повторная прорисовка этого элемента управления требуется
не всегда. Чтобы при изменении размеров элемента управления он каждый раз про-
рисовывался заново, вызовите в его конструкторе методом Control.SetStyle и уста-
новите флаг Resize Redraw в true, как показано в следующем примере:
Visual Basic .NET
SetStyle(ControlStyles.ResizeRedraw, True)
Visual C#
SetStyle{ControlStyles.ResizeRedraw. true);
Чтобы в любое время перерисовать элемент управления вручную, достаточно
вызвать метод Refresh:
Visual Basic .NET
Refresh()
Visual C#
RefreshQ;
> Как создать формируемый элемент управления
1. Объявите класс, производный от класса Control.
2. Добавьте в метод OnPaint код, визуализирующий элемент управления.
3. Реализуйте все нестандартные возможности, необходимые вашему элементу
управления.

Теги: .NET

Статьи по теме:

Извлечение типизированных данных с помощью объекта DataReader
Применение наборов элементов управления
Типы данных .NET Framework
Вывод типов
Абстрактные классы и члены
Декларативная защита по правам доступа к коду
Общие (статические) члены
Установка приложения
Обработка событий клавиатуры на уровне формы
Строительные блоки .NET
Типы значений и ссылочные типы
Обеспечение совместимости с замещенными или скрытыми членами
Создание классов
Реализация полиморфизма через интерфейсы
Классы и структуры
| .NET | Pavel |
 


Пн Вт Ср Чт Пт Сб Вс
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31


     



Rambler's Top100

Данный сайт или домен продается ICQ: 403-353-727

© 2009 Seoliga.ru | .NET | Создание формируемых элементов управления. Регион сайта: Москва и Санкт-Петербург