Элементы управления, разработанные пользователем
.NET Framework дает возможность легко разрабатывать собственные элементы управления. Вы можете создать пользовательский элемент управления, который представляет собой набор стандартных элементов управления, связанных с помощью кода, или можно разработать собственный элемент управления с нуля вверх. Можно даже использовать наследование создать элемент управления, который наследует от существующего элемента управления и добавить его функциональные возможности. Какой бы подход, вы используете, платформа .NET Framework предоставляет функциональные возможности для создания пользовательского интерфейса для любого элемента управления, которые можно создать.
Рисование элемента управления достигается путем выполнения кода в элементе управления OnPaint метод. Единственным аргументом OnPaint метод PaintEventArgs объект, предоставляющий все сведения и функциональные возможности, необходимые для подготовки к просмотру элемента управления. PaintEventArgs Предоставляет два объекта-участника, которые будут использоваться при подготовке к просмотру элемента управления в виде свойств:
ClipRectangle Объект - прямоугольник, представляющий часть элемента управления, который будет заменен. Это может быть весь элемент управления или части элемента управления в зависимости от того, как элемент управления отображается.
Graphics объект - инкапсулирует несколько графических объектов и методов, которые предоставляют функциональные возможности, необходимые для рисования элемента управления.
Дополнительные сведения о Graphics объекта и как его использовать, см. в разделе как: Создание объектов Graphics для рисования.
OnPaint Событие каждый раз, когда рисуется элемент управления или обновляется на экране и ClipRectangle представляет прямоугольник, в котором рисования, будет иметь место. Если весь элемент управления необходимо обновить, ClipRectangle будет представлять размер всего элемента управления. Если только часть элемента управления должен быть обновлен, однако ClipRectangle объект будет представлять только область, которая должна быть перерисована. Примером такого случая может быть, если элемент управления частично закрыт другим элементом управления или формы в пользовательском интерфейсе.
При наследовании от Control , необходимо переопределить OnPaint метод и предоставить код отрисовки графики в пределах. Если вы хотите предоставить пользовательский графический интерфейс для пользовательского элемента управления или наследуемого элемента управления, это можно также сделать путем переопределения OnPaint метод. Ниже приведен пример:
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
' Call the OnPaint method of the base class.
MyBase.OnPaint(e)
' Declare and instantiate a drawing pen.
Using myPen As System.Drawing.Pen = New System.Drawing.Pen(Color.Aqua)
' Draw an aqua rectangle in the rectangle represented by the control.
e.Graphics.DrawRectangle(myPen, New Rectangle(Me.Location, Me.Size))
End Using
End Sub
protected override void OnPaint(PaintEventArgs e)
{
// Call the OnPaint method of the base class.
base.OnPaint(e);
// Declare and instantiate a new pen.
using (System.Drawing.Pen myPen = new System.Drawing.Pen(Color.Aqua))
{
// Draw an aqua rectangle in the rectangle represented by the control.
e.Graphics.DrawRectangle(myPen, new Rectangle(this.Location,
this.Size));
}
}
Предыдущий пример демонстрирует отрисовки элемента управления с очень простой графическое представление. Он вызывает OnPaint метод базового класса, он создает Pen объекта для рисования, и наконец рисуется эллипс в прямоугольнике, определяется Location и Size элемента управления. Несмотря на то, что большая часть кода отрисовки будет намного более сложным, в этом примере демонстрируется использование Graphics объект, содержащийся в PaintEventArgs объекта. Обратите внимание, что если вы наследуете от класса, который уже имеет графическое представление, например UserControl или Buttonи не хотите включить это представление в рендеринг, не следует вызывать базовый класс OnPaint метод.
Код в OnPaint метод вашего элемента управления будет выполняться при первом рисовании элемента управления, и каждый раз, когда произойдет его обновление. Чтобы убедиться, что элемент управления перерисовывается при каждом изменении его размера, добавьте следующую строку в конструктор элемента управления:
SetStyle(ControlStyles.ResizeRedraw, True)
SetStyle(ControlStyles.ResizeRedraw, true);
Note
Используйте Control.Region свойство для реализации непрямоугольных управления.