Такая комбинация создаётся с помощью объекта GraphicsPath. Можно создать любое количество прямоугольников, линий, эллипсов и других элементов и поместить их в объект GraphicsPath. Все элементы объекта GraphicsPath обведены по контуру одним способом, который определяется при выводе объекта GraphicsPath. Использовать разную окраску разных элементов объекта GraphicsPath нельзя.
Добавить новые элементы в объект Path можно с помощью методов:
AddLine – добавляет прямую линию;
AddRectangle – добавляет прямоугольник (добавление прямоугольника возможно только с использованием нового объекта Rectangle, по точкам добавлять нельзя);
Синтаксис данных методов аналогичен синтаксису методов для вызова соответствующих геометрических фигур, за исключением того, что не задаётся первый аргумент – объект Pen.
При рисовании с помощью объекта GraphicsPathиспользуется метод DrawPath, у которого имеются два аргумента – перо и выводимый объект GraphicsPath.
Следующий код иллюстрирует возможность вывода нового изображения с помощью объекта GraphicsPath, состоящего из эллипса, прямоугольника, линии, многоугольника, замкнутой и разомкнутой кривой.
Visual Basic .Net:
Dim g As Graphics
g = Me.CreateGraphics
Dim redpen As Pen
redpen = New Pen(Color.Red, 3)
Dim path1 AsNew GraphicsPath
path1.AddEllipse(10, 10, 200, 100)
Dim r1 AsNew Rectangle(25, 25, 100, 100)
path1.AddRectangle(r1)
path1.AddLine(10, 10, 400, 400)
Dim points As Point() = {New Point(10, 10), New Point(10, 100), New Point(200, 50), New Point(250, 300)}
path1.AddPolygon(points)
path1.AddCurve(points, 0.5)
path1.AddClosedCurve(points, 0.5)
g.DrawPath(redpen, path1)
Visual C#:
Graphics g;
g = this.CreateGraphics();
Pen redpen;
redpen = new Pen(Color.Red, 3);
GraphicsPath path1 = new GraphicsPath();
path1.AddEllipse(10, 10, 200, 100);
Rectangle r1 = new Rectangle(25, 25, 100, 100);
path1.AddRectangle(r1);
path1.AddLine(10, 10, 400, 400);
Point[] points = { new Point(10, 10), new Point(10, 100), new Point(200, 50), new Point(250, 300) };
path1.AddPolygon(points);
path1.AddCurve(points, 0.5f);
path1.AddClosedCurve(points, 0.5f);
g.DrawPath(redpen, path1);
Можно в один объект GraphicsPath добавлять другой объект с помощь метода Addpath. Данный метод имеет два аргумента – добавляемый объект GraphicsPath и логическое значение, равное True, если первая фигура в добавленном объекте является частью последней фигуры в данном объекте и False, если первая фигура в добавленном контуре отделена от последней фигуры в добавляемом объекте.
Сформировав один раз объект GraphicsPath, можно нарисовать его несколько раз в разных местах экрана или разными перьями), можно объявить его вне кода процедур с атрибутом Public и добавлять в него фигуры с помощью разных кнопок, а затем отслеживать его изменение при закрытии формы или её изменении.