【发布时间】:2021-06-16 17:23:11
【问题描述】:
我正在尝试在圆圈内写入文本(不以矩形为中心)对齐方式必须在圆圈内从一行到另一行。
我已经成功绘制了圆圈和文字。我对 Stack Overflow 和 Google 进行了研究,但没有成功将文本放入这个圈子。
private void Button1_Click(object sender, EventArgs e)
{
System.Drawing.Graphics graphicsObj;
graphicsObj = this.CreateGraphics();
// Create font and brush.
Font drawFont = new Font("Arial", 5);
SolidBrush drawBrush = new SolidBrush(Color.Black);
// Create point for upper-left corner of drawing.
float x = 150.0F;
float y = 50.0F;
// Set format of string.
StringFormat drawFormat = new StringFormat();
drawFormat.FormatFlags = StringFormatFlags.FitBlackBox;
graphicsObj.DrawEllipse(Pens.Red, 20, 20, 350, 350);
graphicsObj.DrawString(richTextBox1.Text.ToString(), drawFont, drawBrush, x, y, drawFormat);
}
寻求建议,而不是确切的代码..
-> 如何建立基于矩形的文本对齐连接。 预期输出如下图:https://imge.to/i/miFif
完全一样,但我需要 C# Win.Form -> Wrap text inside a circular div
【问题讨论】:
-
我不确定您所说的“对齐必须在圆内逐行对齐”是什么意思。你的意思是你想让文本在圆的中心垂直和水平居中,还是别的什么?
-
我不认为有一个简单的解决方案 :-( - 您可能需要逐行绘制文本以增加和缩小宽度..
-
除了矩形区域外,没有对文本渲染的内置支持。您需要在 Regions 中分解您的字符串,并在圆周内的特定点绘制适合内接在圆圈中的 Region 的每个部分。您可以使用之前看到的圆形标签:Translucent circle with text 并将
StringFormat.SetMeasurableCharacterRanges与Graphics.MeasureCharacterRanges组合起来定义区域。 -
您可以在此处查看有关
SetMeasurableCharacterRanges和测试最后一部分中文本区域计算的示例:How to highlight wrapped text in a control using the graphics? 和此处:How to compute the correct width of a digit in pixels? -
@Taw,您的评论驱使我找到解决方案:) 喜欢 :: 1. 计算我可以在每行上放置多少个字符,2 创建子字符串数组,3 逐行打印 __谢谢大家cmets,我稍后会为将来的需求提供代码