2011-05-23 14 views
9

Estoy dibujando una línea en un control en mi formulario de Windows como esto:¿Cómo dibujar una línea punteada sobre un objeto?

  // 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); 

me gustaría saber si es posible trazar una línea de puntos (puntos) en lugar de una línea continua regular?

Respuesta

22

Es bastante sencillo una vez que figure out the formatting que define los guiones:

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)); 

Los números de la red de flotadores representan longitudes de trazos de diferentes colores. Entonces, para una simple pizca de 2 píxeles en (negro) y dos de cada uno su aray se verá así: {2,2} El patrón se repite. Si querías 5-anchas rayas con un espacio de 2 píxeles que usaría {5,2}

En el código se vería así:

// 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); 
+0

gracias tanto es así me puede mostrar cómo me gustaría incorporar esto en mi @I código –

+0

: por favor, mira mi edición. Nota de precaución sin embargo. No estoy ejecutando esto a través de un compilador, por lo que puede haber errores de sintaxis e intento. En cualquier caso, debe acercarse. –

5

pluma tiene una propiedad pública que se define como

public DashStyle DashStyle { get; set; } 

puede establecer DasStyle.Dash si desea dibujar una La línea de puntos.

5

Creo que puede lograr esto cambiando el lápiz que usa para dibujar su línea. Así, reemplace las últimas 2 líneas en su ejemplo con:

 var pen = new Pen(Color.Yellow, 3); 
     pen.DashStyle = DashStyle.Dash; 
     graph.DrawLine(pen, point1, point2); 
0

En más moderno C#:

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