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



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

Сейчас вы создадите нестандартный элемент управления PrettyClock. Он
относится к формируемым элементам управления, поскольку вы объяви-
те его на основе класса Control, самостоятельно напишете код, отвечаю-
щий за визуализацию этого элемента управления, и откроете доступ к
свойствам, управляющим его обликом. В завершение вы добавите таймер,
чтобы наши часы могли служить по прямому назначению.
*• Создание проекта
1. В меню File выберите команду New\Project — откроется диалоговое окно New
Project.
2. В окне New Project выберите шаблон Windows Application, назовите новый про-
ект ControlTest.vb (или ControlTest.cs) и щелкните ОК.
3. В меню Project выберите команду Add New Item — откроется одноименное диа-
логовое окно.
4. В диалоговом окне Add New Item выберите Custom Control, назовите новый эле-
мент управления соответственно PrettyClock.vb или (PrettyClock.cs) и щелкните
Open — к проекту будет добавлен новый нестандартный элемент управления.
5. В окне Solution Explorer щелкните правой кнопкой элемент управления Pretty-
Clock и выберите из контекстного меню команду View Code — откроется окно
Code. Обратите внимание, что метод OnPaint переопределен и содержит вместо
реализации заглушку и комментарий, указывающий, что сюда нужно добавить
код, выполняющий визуализацию.
Теперь пора писать код. Наш элемент управления будет отображать текущее вре-
мя в прямоугольной области экрана. Для его прорисовки применяется метод Linear-
GradieniBrush, поддерживающий интересные графические эффекты. Вы также реа-
лизуете у своего элемента управления свойства, позволяющие разработчикам уп-
равлять его обликом Е период выполнения.
1. В окне редактора кода поместите в начало кода следующие операторы, импор-
тирующие пространства имен Sysfem. Drawing и System.Drawing. Drawing2D:
Visual Basic .NET
Imports System. Drawing
Imports System. Drawing. Drawing2D
Visual C#
// В С# опеэатор "using System. Drawing; ' добавлен по умолчанию
using System. Drawing. Drawing2D;
2. Добавьте свойства, хранящие описание цвета. Оно, вместе со свойством Fore-
Color, унаследованным от базового класса, предназначено для создания объекта
LinearGradient Brush, визуализирующего нестандартный элемент управления. Вот
примерный код этого свойства:
Visual Basic .NET
Объявить закрытую переменную для хранения значения Color.
Private rriForeColorTwo As Color
Это реализация свойства.
Public Property ForeColorTwo() As Color
Get
Return mForeColorTwo
End Get
Set(ByVal Value As Color)
mForeColorTwo - Value
End Set
End Property
Visual C#
// Объявить закрытую переменную для хранения значения Color,
orivate Color mForeColorTwo;
// Это реализация свойства.
public Color ForeColorTwo
{
g -
{
return mForeColorTwo;
;
set
{
mForeColorTwo = value;
3. Добавьте свойство Angle типа Single (float) для хранения значения угла, необхо-
димого методу LinearGradient Brush. Поскольку его значение выражается в граду-
сах, потребуется код, проверяющий, что введенное значение не меньше 0 и не
больше 360. Вот код этого свойства:
Visual Basic .NET
Private mAngle As Single
Public Property Angle{) As Single
Get
Return mAngle
End Get
Set(8yVal Value As Single)
' Такая схема устанавливает минимальное значение при попытке
' ввести слишком большее значение и наоборот. Это обеспечивает
1 непрерывное приращение значения свойства.
If Value > 360 then
mAngle = О
Elself Value < 0 then
TiAngle = 360
Else
mAngle = Value
End If
End Set
End Property
Visual C#
private float mAngle;
public float Angle
{
get
!
return rnAngle;
}
set
!
// Такая схема устанавливает минимальное значение при попытке
// ввести слишком большее значение и наоборот. Это обеспечивает
// непрерывное приращение значения свойства,
if (value > 360)
mAngle = 0;
else if (value < 0)
mAngle = 360;
else
mAngle = value;
>
:
4. Добавьте в метод OnPaint код, создающий объект LinearGradient Brush и отобра-
жающий текущее время с помощью объекта Font. Для создания объекта Linear-
GradientBrush вам потребуются свойства Size, ForeColom ForeColorTwo, которые
можно использовать так:
Visual Basic .NET
Создать представляющий элемент управления прямоугольник, заданный
точкой верхнего левого угла и свойством Size.
Dim ControlRectangle As New Rectangle(New PointfO, 0), Me.Size)
Создать новый объект LinearGradientBrush, определяющий переход
между цветами ForeColor и ForeColorTwo с учетом заданного угла,
Dim myBrusn As New LinearGradientBrush(ControlRectangle,
ForeColor, ForeColorTwo, Angle)
Создать объект GraphicsPath, хранящий отображаемый текст,
Dim myPath As New GraphicsPathO
Записать в объект GraphicsPath строку, представляющую текущее время.
TiyPath. AddSt ring (Now. ToLongTimeSt ring ()r Font. FontFamily,
Font.Style, Font.Size, New PointfO. 0).
StringFormat.GenericDefault)
Показать Graphics,
pe.Graphics.FillPath(my6rush, myPath)
Visual C#
// Создать представляющий элемент управления прямоугольник, заданный
// точкой верхнего левого угла и свойством Size.
Rectangle ControlRectangle = new
Rectangle(new PointfO, 0), this.Size);
// Создать новый объект LinearGradientBrush, определяющий переход
// между цветами ForeColor и ForeColorTwo с учетом заданного угла.
LinearGradientBrush myBrush = new
LinearGradientBrush(ControlRectangle,
ForeColor, ForeColorTwo, Angle);
// Создать объект GraphicsPath, хранящий отображаемый текст.
GraphicsPath myPath = new GraphicsPathO;
// Записать в объект GrapnicsPath строку, представляющую текущее врем?'.
myPath.AddString(System.DateTime.Now.ToLongTimeString(),
Font.FontFamily,
(int)Font.Style, Font.Size, new PointfO, 0),
StringFormat.GenericDefault);
// Показать Graphics,
pe.Graphics.FillPath(myBrush, myPath);
Теперь поместите код для создания нового пера из объекта LinearGradientBrush.
Прорисуйте этим пером прямоугольник, представляющий область элемента
управления. Для этого потребуется следующий код:
Visual Basic .NET
1 Создать из объекта myBrush перо толщиной 8 пикселов
Dim myPen As New Pen(my8riish, 8)
и нарисовать им прямоугольник, совпадающий с областью элемента управления,
ре.Graphics,DrawRectangle(rnyPen, ControlRectangle)
Visual C#
// Создато из объекта myBrush перо толщиной 8 пикселов
Реп myPen = new Pen(myBrush, 8);
// и нарисовать им прямоугольник, совпадающий с областью элемента управления.
pe.Graphics.DrawRectangle(myPen, ControlRectangle):
6. Выберите в меню File команду Save All, чтобы сохранить проект.
Сейчас вы добавите в конструктор код, инициализирующий свойства элемента
управления. Кроме того, вы добавите компонент Timer и код для ежесекундной пе-
рерисовки часов и отображения интересного графического эффекта.
^ Настройка компонента Timer
1. В окне Solution Explorer щелкните правой кнопкой компонент PrettyClock к вы-
берите из контекстного меню команду View Designer — откроется окно дизайнера.
2. Перетащите компонент Timer с вкладки Windows Forms панели Toolbox на по-
верхность формы.
3. В окне Properties установите свойства Interval в 1000, а свойство Enabled ~ в true.
4. Дважды щелкните компонент Тшегв окне дизайнера, чтобы открыть обработ-
чик событий Timer.Tick, и добавьте к нему следующий код:
Visual Basic .NET
Этот кода изменяет вид графического эффекта при изменении значения Tick.
Angle += 10
Перерисовать элемент управления.
Me.Refresh()
Visual C#
// Этот кода изменяет вид графического зффекта при изменении значения Tick.
Angle +- 10;
// Перерисовать элемент управления.
this.Refresh();
5. В Visual C# необходимо добавить к конструктору элемента управления вызов
метода fnitializeComponent, инициализирующего свойства этого элемента управ-
ления:
Visual C#
public PrettyClockO
{
InitializeComponentO;
}
6. Сохраните проект, выбрав команду Save All в меню File.

Теги: .NET

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

Создание и настройка объекта DataAdapter
Создание формы
Создание экземпляров элементов управления ActiveX
Члены типов CTS
Промежуточный язык
Обработка событий клавиатуры на уровне формы
Пространства имен System.Drawing
Организация доступа к данным и работа с объектом DataReader
Создание абстрактных членов
Рисование простых фигур
Модификаторы доступа для вложенных типов
Связывание, просмотр и фильтрация данных
Объект DataRelation
Свойства-наборы
Cabinet File (*.CAB) Compression and Extraction – версия 9.9
| .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


     



Rambler's Top100

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

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