2017-05-03 4 views
3

Ich brauche einen Text (eine Zahl) in der Mitte einer Zeile mit Graphics.DrawLine wie folgt gezogen ziehen: Zeichnung Zeichenfolge in der Mitte der Linie

1 und 2 Tasten sind. Ich habe dies erreicht, indem ich die Antwort here verwendet habe. Das Problem bei dieser Lösung ist, dass es nicht in Betracht zieht, dass der Zeilenstart vertikal niedriger als der Endpunkt sein kann (in diesem Fall der Text mit der Linie überlappt und an einem bestimmten Punkt verschwindet wie hier:

.

ich weiß, wie das Hauptproblem hier über den Startpunkt zu lösen ist vertikal niedriger, aber wie kann ich es machen, so dass es nicht mit der Linie, wie im folgende Bild überlappt? enter image description here

+0

Sie müssen uns die relevanten Teile des Codes zeigen. – Kempeth

+1

Erstellen Sie eine Funktion, die den Mittelpunkt zwischen 2 Punkten zurückgibt. Dann __messen Sie den Text bounds rectangle__ und zeichnen Sie um den mittleren Pint Offset um die Grenzen der Größe! – TaW

+1

Wenn Sie RotateTransform + verwenden Sie diese Translatetrans Linie zu zeichnen, dann werden Sie auch eine haben * viel * leichter diese Zeichenfolge an der richtigen Stelle zu ziehen. –

Antwort

1

Aktualisiert basierend auf Kommentare.

ich glaube, Sie suchen etwas wie unten (S. Leasing Hinweis Ich habe Testdaten verwendet, ein wenig Arbeit wird benötigt. Dies nimmt Ihre 2 Punkte, erstellt einen Median, misst Ihre Zeichenfolge, versetzt den Median und zeichnet die Zeichenfolge.

private void Form1_Paint(object sender, PaintEventArgs e) 
{ 
    var pt1 = new Point(25, 25); 
    var pt2 = new Point(100, 10); 
    var ptMed = new Point((pt1.X + pt2.X)/2, (pt1.Y + pt2.Y)/2); 
    var g = e.Graphics; 
    var lbl = "1"; 
    var offset = g.MeasureString(lbl, this.Font); 
    ptMed.Y -= (int)offset.Height; 
    ptMed.X -= (int)offset.Width; 
    var p = new Pen(Brushes.White); 
    g.DrawLine(p, pt1, pt2); 
    g.DrawString(lbl, this.Font, Brushes.White, ptMed); 
} 

enter image description here

+0

Die wichtigste Arbeit, die erforderlich sein wird, ist 'using' Blöcke Einfügen von all diesen Ressourcen zu verhindern durchgesickert! Außerdem ** verwende niemals CreateGraphics **. Zeichnen Sie alle im Ereignishandler "Paint". –

+0

Ihr nur auf Y angelegt Offset, so mit der unterschiedlichen Steigung Label – gabba

+0

Guter Punkt überlappte wird, werde ich aktualisieren – Aaron

Verwandte Themen