Тема Методы и свойства класса Graphics. Рисование геометрических фигур Рисование линии (DrawLine)
За рисование линий в C# отвечает метод DrawLine. Он рисует линию, соединяющую две точки с заданными координатами. Указанный метод может быть перегружен. Ниже (на слайде) указаны варианты перегрузки этого метода. Рассмотрим отдельно каждый вариант перегрузки см. слайд.
public void DrawLine(Pen, int, int, int, int); public void DrawLine(Pen, float, float, float, float);
public void DrawLine(Pen, Point, Point); public void DrawLine(Pen, PointF PointF);
Первый параметр во всех вариантах перегрузки задает инструмент для рисования линии — перо. Перья создаются как объекты класса Pen. Программно это будет выглядеть следующим образом:
Pen myPen = new Pen(Brushes.Aqua,5);
Здесь мы создали перо цвета Aqua толщиной 5 пикселов.
Остальные параметры перегруженных методов DrawLine задают координаты соединяемых точек. Эти координаты могут быть заданы как объекты класса Point и PointF, а также в виде целых чисел и чисел с плавающей десятичной точкой.
Для первых двух вариантов первая пара определяет координаты первой точки по горизонтальной и вертикальной оси, а вторая — координаты второй точки по этим же осям. Разница между первым и вторым методом заключается в использовании координат различных типов (целочисленных int и с плавающей десятичной точкой float). Для варианта целых чисел вызов методов будет выглядеть следующим образом.
Для варианта с классом Point вызов метода будет выглядеть следующим образом.
Point myPoint1 = new Point(100, 100);
Point myPoint2 = new Point(200,100);
g.DrawLine((new Pen(Brushes.Red, 5)), myPoint1, myPoint2);
В классах Point и PointF определены свойства X и Y, задающие, соответственно, координаты точки по горизонтальной и вертикальной оси. При этом в классе Point эти свойства имеют целочисленные значения, а в классе PointF — значения с плавающей десятичной точкой.
Объединив описанные строки получим обработчик события Form1_Paint.
private void Form1_Paint(object sender, PaintEventArgs e)
Graphics g = e.Graphics;
Pen myPen = new Pen(Brushes.Aqua,5);
Point myPoint1 = new Point(100, 100);
Point myPoint2 = new Point(200,100);
g.DrawLine((new Pen(Brushes.Red, 5)), myPoint1, myPoint2);
Результат работы программы представлен ниже.
Рис. Результат работы программы.
Задание. Напасать программу, которая бы выводила на экран картинку следующего вида см. слайд (рис). Для реализации использовать цикл и метод:
public void DrawLine(Pen, int, int, int, int); 
Рис. Задание.
Набор линий (DrawLines)
В C# существует и другой способ нарисовать несколько линий. Этого можно достигнуть, вызвав один раз метод DrawLines, который позволит нарисовать сразу несколько прямых линий, соединенных между собой. По своей сути метод DrawLines позволяет соединить между собой несколько точек. Координаты этих точек по горизонтальной и вертикальной оси передаются методу через массив класса Point или PointF. Ниже представлены перегрузки метода DrawLines.
public void DrawLines(Pen, Point[]); public void DrawLines(Pen, PointF[];
Продемонстрируем работу метода DrawLines. Предположим, что нам необходимо нарисовать изображение следующего вида(рис.) см. слайд.

Рис. Задание на метод DrawLines.
Для решения задачи объявим в классе Form1 этого приложения мы создаем кисть pen для рисования линий и объявляем массив mypen.
Pen mypen = new Pen(Color.Red, 2);
Point[] points = new Point[50];
Далее в конструкторе формы инициализируем массив точек points, которые нужно соединить линиями.
for (int i = 0; i < 20; i++)
points[i] = new Point(x, 10 * i);
Координаты точек по горизонтальной оси зависят от того, является ли значение переменной цикла i четным или нечетным.
Обработчик события Form1_Paint будет иметь вид (см. слайд).
private void Form1_Paint(object sender, PaintEventArgs e)
Graphics g = e.Graphics;
Результат работы программы приведен на (рис)(см. слайд).

Рис. Результат работы программы.
В приведенном коде появилась новая неизвестная строчка.
Если сравнить два рисунка, то можно заметить, что линии на втором рисунке гладкие и не содержат ступенек (см. слайд). Это позволил сделать один из параметров контекста отображения, а именно параметр SmoothingMode. Этот параметр задает режим сглаживания при отображении линий. Стоит обратить внимание, что для его использования необходимо добавить пространство имен System.Drawing.Drawing2D в самом начале файла. Для чего используем ключевое слово using.(см. слайд)
Стоит отметить, что использование сглаживания повышает качество изображения, однако приводит к уменьшению скорости рисования.
The best way to draw a line in windows form C#
I just want to know the best way to draw a line in windows form without using GDI+,but use control from toolbox.
5 Answers 5
Another solution using Label control
- Add a Label control to your form.
- Set Label Text to empty.
- Set BorderStyle to Fixed3D.
- Set AutoSize to false.
- Set Height to 2 (most easily accomplished by typing 2 into the Size/Height field under Label Properties).
![]()
Might not be the best choice but should help
![]()
You can use my control:
![]()
You can draw line runtime by below code:
-
The Overflow Blog
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.3.11.43304
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.
Работа с графикой
Одним из способов построения двухмерной графики в окне — это использование фигур. Фигуры фактически являются обычными элементами как например кнопка или текстовое поле. К фигурам относят такие элементы как Polygon (Многоугольник), Ellipse (овал), Rectangle (прямоугольник), Line (обычная линия), Polyline (несколько связанных линий). Все они наследуются от абстрактного базового класса System.Windows.Shapes.Shape :

От базового класса они наследуют ряд общих свойств:
Fill заполняет фон фигуры с помощью кисти — аналогичен свойству Background у прочих элементов
Stroke задает кисть, которая отрисовывает границу фигуры — аналогичен свойству BorderBrush у прочих элементов
StrokeThikness задает толщину границы фигуры — аналогичен свойству BorderThikness у прочих элементов
StrokeStartLineCap и StrokeEndLineCap задают для незамкнутых фигур (Line) контур в начале и в конце линии соответственно
StrokeDashArray задает границу фигуры в виде штриховки, создавая эффект пунктира
StrokeDashOffset задает расстояние до начала штриха
StrokeDashCap задает форму штрихов
Ellipse
Ellipse представляет овал:
При одинаковой ширине и высоту получается круг:

Rectangle
Rectangle представляет прямоугольник::
С помощью свойств RadiusX и RadiusY можно округлить углы прямоугольника:

Line представляет простую линию. Для создания линии надо указать координаты в ее свойствах X1, Y1, X2 и Y2. При этом надо учитывать, что началом координатной системы является верхний левый угол:

Polygon
Polygon представляет многоугольник. С помощью коллекции Points элемент устанавливает набор точек — объектов типа Point, которые последовательно соединяются линиями, причем последня точка соединяется с первой:

В данном случае у нас три точки (50, 150), (150, 50) и (250, 150), которые образуют треугольник.
Polyline
Polyline представляет набор точек, соединенных линиями. В этом плане данный элемент похож на Polygon за тем исключением, что первая и последняя точка не соединяются:

Настройка контура
С помощью ряда свойств мы можем настроить отображение контура. Например:

Цвет самого контура определяется с помощью свойства Stroke , а его толщина — с помощью StrokeThickness .
StrokeDashArray устанавливает длину штрихов вместе с отступами. Например, StrokeDashArray=»4 2″ устанавливает длину штриха в 4 единицы, а последующего отступа в 2 единицы. И эти значения будут повторяться по всему контуру. При другой установке, например, StrokeDashArray=»1 2 3″ уже задается два штриха. Первый штрих имеет длину в 1 единицу, а второй — в 3 единицы и между ними расстояие в 2 единицы. И так вы можем настроить количество штрихов и расстояний между ними.
StrokeDashCap задает форму на концах штрихов и может принимать следующие значения:
Flat : стандартные штрихи с плоскими окончаниями
Square : штрихи с прямоугольными окончаниями
Round : штрихи с округлыми окончаниями
Triangle : штрихи с окончаниями в виде треугольников
Программное рисование
Создание фигур программным образом осуществляется так же, как и создаются и добавляются все остальные элементы:
Как нарисовать линию в c

Фигура Line представляет отрезок прямой, соединяющий между собой две точки. Начальная и конечная точки задаются свойствами X1 и Y1 (для первой точки) и Х2 и Y2 (для второй точки). Например, ниже показан код линии, простирающейся от (0,0) до (200,150):
Свойство Fill не имеет никакого эффекта для линии. Понадобится устанавливать свойство Stroke.

Координаты, используемые для линии, отсчитываются относительно верхнего левого угла контейнера, в котором она содержится. Например, если поместить предыдущую линию в StackPanel, то координаты (0,0) будут указывать на то место, где будет находиться элемент в контейнере StackPanel. Это может быть верхний левый угол окна, но, возможно, и нет. Если StackPanel использует ненулевое значение Margin, или же линии предшествуют другие элементы, то начало точки (0,0) окажется на некотором расстоянии от вершины окна.
Однако для линии вполне допустимо использовать отрицательные координаты. Фактически, можно указывать координаты, которые унесут линию за пределы выделенного пространства, и она будет нарисована поверх любой другой части окна. Это невозможно для фигур Rectangle и Ellipse, которые рассматривались до сих пор. Тем не менее, у такой модели есть недостаток, а именно: линия не может использовать модель «плавающего содержимого». Это значит, что для линии невозможно установить такие свойства, как Margin, HorizontalAlignment и VerticalAlignment — они не будут иметь никакого эффекта. То же ограничение касается фигур Polyline и Polygon.
Для линии можно использовать свойства Height, Width и Stretch, хотя это не особо принято. Базовая технология предусматривает применение Height и Width для определения пространства, выделенного под линию, с последующим использованием свойства Stretch для изменения размера линии, чтобы она уместилась в эту область.
В случае помещения Line в контейнер Canvas присоединенные свойства позиции (такие как Тор и Left) по-прежнему применимы. Они определяют стартовую позицию линии. Другими словами, две координаты линии задают величину смещения. Рассмотрим следующую линию:
Линия простирается от (0,0) до (10,100), используя систему координат, которая трактует точку (5,100) в Canvas как (0,0). Это делает ее эквивалентной линии, в которой свойства Тор и Left не используются:
Применение свойства позиционирования при помещении Line в Canvas остается на ваше усмотрение. Часто за счет выбора подходящей начальной точки удается упростить рисование линии. Кроме того, это может облегчить перемещение частей рисунка.
Например, рисовать несколько линий и других фигур в определенной позиции Canvas неплохо относительно некоторой близлежащей точки (указывая одинаковые координаты Тор и Left). Таким образом, при необходимости можно сместить в новую точку сразу часть рисунка.