如何从C#中的一行检测字符串溢出?

时间:2016-03-26 11:59:31

标签: c# word-wrap

我想知道如何在C#中自动换行,当我遇到一个非常好的解决方案来解决我在in this URL行中自动换行文字的问题时。不幸的是,我没有足够的声誉来直接询问OP关于一个特定的问题我正在拥有(并且很可能处理此问题的人将无限期地)

问题描述:
如果需要使用此代码进行自动换行,我可以自动换行字符串:

Graphics PAddress = e.Graphics;

SizeF PAddressLength = PAddress.MeasureString("Residential Address: " + RAddressTextBox.Text, new Font(fontface, fontsize, FontStyle.Regular),700);

PAddress.DrawString("Residential Address: "+PAddressLength + RAddressTextBox.Text, new Font(fontface, fontsize, FontStyle.Regular), Brushes.Black, new RectangleF(new Point(pagemarginX, newline()),PAddressLength),StringFormat.GenericTypographic);

然而,只要字长从单行溢出,我就找不到接收触发器的地方。

例如:
在该代码的 LINE-2 中,每当字长超过 700px 时,它就会移到下一行。它通过跟随RectangleF到wordwrap来做到这一点。它正在 自动 ,这是一个问题,因为这使得很难知道它是否已超过700px。

这是每当我尝试打印 PAddressLength

时显示信息的格式
  

{宽度= 633.1881,高度= 47.14897}

我在想如果我可以使用PAddressLength.Width从中提取宽度值,那么我可以部分解决这个问题。但有了这个,我需要计算剩下的空间(即700px - 633.1881px)是否能容纳下一个单词(如果有的话)

打破问题:

  • 已知知道如何自动换行当字符串长于使用Graphics.MeasureString中指定的this solution所指定的字符串时另一个问题。
  • 但是^进程会自动发生,所以我想知道如何检测自动换行是否发生(以及每条线包裹的线条最多可以是700px宽度)
  • 我需要知道已经包装的行数,以便知道我写的 newline()函数执行的次数,这给出了合适的每次执行时的行间距。

其他, 红利问题;可能或可能不会解决)是否有某种方法可以提取值 633.1881 然后计算下一个单词是否适合(700 - 633.1881)px 空格?

1 个答案:

答案 0 :(得分:2)

MeasureString有一个重载,它返回out参数中使用的行数:https://msdn.microsoft.com/en-us/library/957webty%28v=vs.110%29.aspx