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

Sid*_*mal 5 c# word-wrap

我想知道如何在C#中自动换行,当我遇到一个非常好的解决方案,解决了我在这个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);
Run Code Online (Sandbox Code Playgroud)

但是,当单词长度从单行溢出时,我找不到接收触发器的位置.

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

这是我尝试打印PAddressLength时显示信息的格式:

{宽度= 633.1881,高度= 47.14897}

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

打破问题:

  • 已经知道如果字符串包装的时间长于使用Graphics.MeasureString指定的字符串,如另一个问题中此解决方案中给出的那样.
  • 但是这个过程是自动发生的,所以我想知道如何检测自动换行是否已经发生(以及每条线的最大宽度是700px所包裹的行怎么样)
  • 我需要知道已经包装的行数,以便知道执行我写的newline()函数的次数,每次执行时都会给出适当的行间距.

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

Stu*_*use 3

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