Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лр3_Компоненты.doc
Скачиваний:
3
Добавлен:
01.09.2019
Размер:
761.86 Кб
Скачать

2.2.3. Программная реализация элемента управления.

Теперь пора писать код. Наш элемент управления будет отображать текущее время в прямоугольной области экрана. Для его прорисовки применяется метод LinearGradieniBrush, поддерживающий интересные графические эффекты. Вы также реализуете у своего элемента управления свойства, позволяющие разработчикам управлять его обликом в период выполнения.

1. В окне редактора кода поместите в начало кода следующие операторы, импортирующие пространства имен System. Drawing и System.Drawing. Drawing2D

using System. Drawing;

using System. Drawing. Drawing2D;

2. Добавьте свойства, хранящие описание цвета. Оно, вместе со свойством ForeColor, унаследованным от базового класса, предназначено для создания объекта LinearGradient Brush, визуализирующего нестандартный элемент управления. Вот примерный код этого свойства:

// Объявить закрытую переменную для хранения значения Color,

private Color mForeColorTwo;

// Это реализация свойства.

public Color ForeColorTwo

{

get{ return mForeColorTwo; }

set{ mForeColorTwo = value; }

}

3. Добавьте свойство Angle типа Single (float) для хранения значения угла, необходимого методу LinearGradient Brush. Поскольку его значение выражается в градусах, потребуется код, проверяющий, что введенное значение не меньше 0 и не больше 360. Вот код этого свойства:

private float mAngle;

public float Angle

{

get{ return mAngle; }

set

{

// Такая схема устанавливает минимальное значение при попытке

// ввести слишком большее значение и наоборот. Это обеспечивает

// непрерывное приращение значения свойства,

if (value > 360) mAngle = 0;

else

{

if (value < 0) mAngle = 360;

else mAngle = value;

}

}

}

4. Добавьте в метод OnPaint код, создающий объект LinearGradient Brush и отображающий текущее время с помощью объекта Font. Для создания объекта LinearGradientBrush вам потребуются свойства Size, ForeColom ForeColorTwo, которые можно использовать так:

// Создать представляющий элемент управления прямоугольник, заданный

// точкой верхнего левого угла и свойством Size.

Rectangle ControlRectangle = new Rectangle(new Point(0, 0), this.Size);

// Создать новый объект LinearGradientBrush, определяющий переход

// между цветами ForeColor и ForeColorTwo с учетом заданного угла.

LinearGradientBrush myBrush = new LinearGradientBrush(ControlRectangle, ForeColor,

ForeColorTwo, Angle);

// Создать объект GraphicsPath, хранящий отображаемый текст.

GraphicsPath myPath = new GraphicsPath();

// Записать в объект GrapnicsPath строку, представляющую текущее время.

myPath.AddString(System.DateTime.Now.ToLongTimeString(), Font.FontFamily,

(int)Font.Style, Font.Size, new PointF(0, 0), StringFormat.GenericDefault);

// Показать Graphics,

pe.Graphics.FillPath(myBrush, myPath);

Теперь поместите код для создания нового пера из объекта LinearGradientBrush. Прорисуйте этим пером прямоугольник, представляющий область элемента управления. Для этого потребуется следующий код:

// Создать из объекта myBrush перо толщиной 8 пикселов

Pen myPen = new Pen(myBrush, 8);

// и нарисовать им прямоугольник, совпадающий с областью элемента управления.

pe.Graphics.DrawRectangle(myPen, ControlRectangle);

6. Выберите в меню File команду Save All, чтобы сохранить проект. Сейчас вы добавите в конструктор код, инициализирующий свойства элемента управления. Кроме того, вы добавите компонент Timer и код для ежесекундной перерисовки часов и отображения интересного графического эффекта.