Как нарисовать пунктирную линию над объектом? - PullRequest
14 голосов

Я рисую линию на элементе управления в моей форме Windows следующим образом:

            // Get Graphics object from chart
            Graphics graph = e.ChartGraphics.Graphics;

            PointF point1 = PointF.Empty;
            PointF point2 = PointF.Empty;

            // Set Maximum and minimum points
            point1.X = -110;
            point1.Y = -110;
            point2.X = 122;
            point2.Y = 122;

            // Convert relative coordinates to absolute coordinates.
            point1 = e.ChartGraphics.GetAbsolutePoint(point1);
            point2 = e.ChartGraphics.GetAbsolutePoint(point2);

            // Draw connection line
            graph.DrawLine(new Pen(Color.Yellow, 3), point1, point2);

Я хотел бы знать, можно ли нарисовать пунктирную (пунктирную) линию вместо обычной сплошной линии?

Ответы [ 5 ]

31 голосов
/ 23 мая 2011

Это довольно просто, когда вы выясните форматирование , которое определяет тире:

float[] dashValues = { 5, 2, 15, 4 };
Pen blackPen = new Pen(Color.Black, 5);
blackPen.DashPattern = dashValues;
e.Graphics.DrawLine(blackPen, new Point(5, 5), new Point(405, 5));

Числа в массиве с плавающей точкой представляют собой длины тире разных цветов.Таким образом, для простого штриха в 2 пикселя (черного) и по два с каждого ваш массив будет выглядеть следующим образом: {2,2} Затем шаблон повторяется.Если бы вы хотели штрихи шириной 5 с 2 пикселями, вы бы использовали {5,2}

В вашем коде это выглядело бы так:

// Get Graphics object from chart
Graphics graph = e.ChartGraphics.Graphics;

PointF point1 = PointF.Empty;
PointF point2 = PointF.Empty;

// Set Maximum and minimum points
point1.X = -110;
point1.Y = -110;
point2.X = 122;
point2.Y = 122;

// Convert relative coordinates to absolute coordinates.
point1 = e.ChartGraphics.GetAbsolutePoint(point1);
point2 = e.ChartGraphics.GetAbsolutePoint(point2);

// Draw (dashed) connection line
float[] dashValues = { 4, 2 };
Pen dashPen= new Pen(Color.Yellow, 3);
dashPen.DashPattern = dashValues;
graph.DrawLine(dashPen, point1, point2);
9 голосов
/ 23 мая 2011

Я думаю, что вы можете сделать это, изменив ручку, которую вы используете, чтобы нарисовать линию. Итак, замените последние 2 строки в вашем примере на:

        var pen = new Pen(Color.Yellow, 3);
        pen.DashStyle = DashStyle.Dash;
        graph.DrawLine(pen, point1, point2);
7 голосов
/ 23 мая 2011

Ручка имеет публичное свойство, которое определяется как

public DashStyle DashStyle { get; set; }

Вы можете установить DasStyle.Dash, если хотите нарисовать пунктирную линию.

3 голосов
/ 23 мая 2011
2 голосов
/ 02 октября 2016

В более современных C #:

var dottedPen = new Pen(Color.Gray, width: 1) { DashPattern = new[] { 1f, 1f } };
...