【问题标题】:How to connect .DrawEllipse with .DrawString如何连接 .DrawEllipse 和 .DrawString
【发布时间】: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.SetMeasurableCharacterRangesGraphics.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,我稍后会为将来的需求提供代码

标签: c# drawing


【解决方案1】:

DrawString 具有格式选项的重载:

...
DrawString(e.Cache, text, rect, 
  new StringFormat() {
    LineAlignment = StringAlignment.Center, 
    Alignment = StringAlignment.Center
  });

【讨论】:

    猜你喜欢
    • 2017-07-27
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 2017-08-31
    相关资源
    最近更新 更多