- •Тверской государственный технический университет
- •Создание пользовательских компонент.
- •1. Теоретическая часть.
- •1.1. Общая архитектура компонент.
- •1.2. Основные принципы создания элементов управления
- •1.2.1. Наследование от существующих элементов управления
- •1.2.2. Создание составных элементов управления
- •Как создать составной элемент управления
- •1.2.3. Создание формируемых элементов управления
- •Как создать формируемый элемент управления
- •1.3. Отладка элементов управления
- •1.3.1. Отладка компонентов в режиме разработки.
- •1.3.2. Отладка элемента управления в проекте Windows Forms
- •1.3.3. Отладка элемента управления в проекте библиотеки классов или элементов управления
- •1.4. Добавление элементов управления на панель Toolbox.
- •1.5. Назначение значка элементу управления
- •2.1.2. Программная реализация компоненты.
- •2.1.3. Добавление информации о свойствах.
- •2.1.4. Реакция на изменение свойства.
- •2.1.5. Добавление событий.
- •2.2. Создание 2-го нестандартного элемента управления
- •2.2.1. Описание элемента управления
- •2.2.2. Создание проекта
- •2.2.3. Программная реализация элемента управления.
- •2.2.4. Настройка компонента Timer
- •2.2.5. Тестирование элемента управления
- •2.3. Создание собственного элемента пользовательского интерфейса.
- •3. Задание на лабораторную работу
- •4. Содержание отчета по лабораторной работе
- •Литература:
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 и код для ежесекундной перерисовки часов и отображения интересного графического эффекта.