文本剪裁问题,大小由MeasureString计算

时间:2017-03-22 04:13:17

标签: c# winforms graphics gdi+

我有一个示例字符串,我计算其大小并通过下面的代码在表单中绘制字符串

public partial class Form1 : Form
{
   Rectangle textRectangle;
   string text = "testing the size 1 testing the size 1 testing the size 1 testing the size 1";

   public Form1()
   {
       InitializeComponent();

       Size textSize = this.CreateGraphics().MeasureString(text, this.Font, 100).ToSize();

       textRectangle = new Rectangle(0, 0, textSize.Width, textSize.Height);
   }

   protected override void OnPaint(PaintEventArgs e)
   {
       base.OnPaint(e);
       using (SolidBrush brush = new SolidBrush(Color.Blue))
       {
           e.Graphics.DrawString(text, this.Font, brush, textRectangle);
       }
   }
}

我的问题是从简单字符串计算的textRectangle不足以在表单中绘制。请参考附图,未绘制一些给定的字符串。

enter image description here

有谁能请更新我,为什么从MeasureString()计算的大小不足以使用DrawString()方法绘制?

1 个答案:

答案 0 :(得分:0)

使用 MeasureTrailingSpaces formatflags 时,上述问题已得到解决。使用以下代码

StringFormat stringFormat = new StringFormat(StringFormatFlags.MeasureTrailingSpaces);
Size textSize = this.CreateGraphics().MeasureString(text, this.Font, 100, stringFormat).ToSize();
textRectangle = new Rectangle(0, 0, textSize.Width, textSize.Height);

在计算大小时,不考虑空格,因此要考虑字符串中的空格,必须使用MeasureTrailingSpaces。