C# 在对角线路径上对齐文本

C# 在对角线路径上对齐文本,c#,winforms,text,C#,Winforms,Text,我有两个点在连接时画一条线。线可以是垂直线、水平线、垂直线或(最常见的)对角线 我想沿着这条路径尝试文本。我使用的是C#和WinForms,但我认为这不如一些简单的psuedo代码重要,因为这些代码可能包含一些数学(trig?),需要找到将文本对齐的路径角度。如果使用OnPaint()方法绘制文本,可以尝试以下()方法: 使用Math.Atan2()计算角度。通过乘以180/Math.Pi将弧度转换为度。获取RotateTransform()的旋转中心是使文本与直线正确对齐的关键步骤。r*Mat

我有两个点在连接时画一条线。线可以是垂直线、水平线、垂直线或(最常见的)对角线


我想沿着这条路径尝试文本。我使用的是C#和WinForms,但我认为这不如一些简单的psuedo代码重要,因为这些代码可能包含一些数学(trig?),需要找到将文本对齐的路径角度。

如果使用
OnPaint()
方法绘制文本,可以尝试以下()方法:


使用Math.Atan2()计算角度。通过乘以180/Math.Pi将弧度转换为度。获取RotateTransform()的旋转中心是使文本与直线正确对齐的关键步骤。r*Math.Cos(角度)表示距直线起点的X偏移,r*Sin(角度)表示距Y偏移,其中r表示距直线起点的偏移。根据字体的高度进行调整,使其高于线条。

谢谢,这似乎有效。我目前唯一的问题是,它也会旋转我画的所有线条和东西——尽管我认为我可以创建一个新的图形对象。你可能可以在用
g.RotateTransform(-deg)
绘制字符串后取消旋转文本。这很有效,谢谢。我乘以-1,但效果与你发布的相同。“r”代表什么?旋转?我现在有'e.Graphics.TranslateTransform(点X,点Y);'作为起点的地方。这似乎在不使用Math.Cos/Sin的情况下有效,但是,在某些情况下,它现在处于下线。你会建议我怎么做,使它始终高于线,无论我画什么角度?我标记这是最好的答案,因为它涵盖了我寻找的大部分内容。我发现在WPF中这个数量级更容易,所以我决定这样做。
Graphics g = e.Graphics;  // your graphics object.
float deg = 45F;  // an angle, this one is 45 degrees

g.RotateTransform(deg);
g.DrawString("slopey text is fun");