【问题标题】:Drawing text centered within a rectangle在矩形内居中绘制文本
【发布时间】:2012-11-20 06:20:17
【问题描述】:

我有代码,类似如下:

string myText = "This is a test";
Font myFont = new Font("Arial", 10);
Rectangle rect = new Rectangle(10,10,100,100);
Graphics g = e.Graphics;
g.DrawString(myText, myFont, rect.X, rect.Y);

虽然这可行,但我想做的是让文本在矩形的尺寸内垂直和水平居中。另外,如果可能的话,如果文本太大而不能放在一行上,我想换行。如何在 C#/GDI+ 中执行此操作?

【问题讨论】:

    标签: c# winforms gdi+


    【解决方案1】:

    我会使用其中一个 DrawString 重载,它需要 StringFormat 您必须使用 MeasureString 检查文本的长度,以确保它适合并自己包装。 在进一步查看StringFormatFlags 时,它有一个 NoWrap 标志,暗示默认为 wrap:

    来自上一个链接:

    当在矩形内格式化时,行之间的文本换行被禁用。当传递一个点而不是一个矩形时,或者当指定的矩形的线长为零时,将隐含此标志。

    【讨论】:

    • 谢谢!是的,我刚刚发现,自动换行,所以这个解决方案解决了我的两个问题!
    • 我尝试了所有可能的 StringFormatFlags,但找不到任何按照 OP 的要求在矩形中垂直居中的文本。也许可以在此处共享所需的代码示例?
    【解决方案2】:

    简单、未经研究的方法:

    自动换行将你的字符串分解成更小的子字符串。即

    "this is"
    "a test"
    

    您可以使用String.Split() 方法将您的字符串拆分为单词,然后将这些单词附加在一起,直到您的字符串达到某个阈值。然后新建一个字符串。

    至于居中,您可以用空格填充各个字符串。对于垂直居中,您可以在字符串的开头添加一些换行符。

    我将把涉及的算术交给你。它不应该那么难。

    【讨论】:

      猜你喜欢
      • 2014-01-13
      • 1970-01-01
      • 2011-06-05
      • 2011-07-31
      • 1970-01-01
      • 1970-01-01
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多