在线条中间绘制字符串

时间:2017-05-03 13:16:12

标签: c# winforms

我需要在用Graphics.DrawLine绘制的一条线的中间画一些文字(数字),如下所示:

1和2是按钮。我通过使用here提供的答案实现了这一目标。 这个解决方案的问题在于它没有考虑到行开始可以垂直低于终点的事实(在这种情况下,文本与行重叠并且在某一点上消失,如下所示:

我知道如何在这里解决关于起点垂直降低的主要问题,但是我怎样才能使它不与线重叠,如下图所示? enter image description here

1 个答案:

答案 0 :(得分:2)

根据评论更新。

我相信你正在寻找类似下面的东西(请注意我使用了测试数据,需要做一些工作。这需要你的2分,创建一个中位数,测量你的字符串,抵消中位数,并绘制字符串。

 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