C#中字符串溢出的换行符,并给出已换行的行数
从这两个问题(这是我的 我试图解决,但遇到了一些问题 看看我被困在哪里!!C#中字符串溢出的换行符,并给出已换行的行数,c#,winforms,C#,Winforms,从这两个问题(这是我的 我试图解决,但遇到了一些问题 看看我被困在哪里!! 我已成功地使用代码将此字符串“Damodarrg,Kusunti,Inside Ringroad,Lalitpur,Bagmati,Nepal”用word包装起来(请参见我的第二个代码) 但我不知道如何获得已包装的行数。(因为它会自动包装) 这是我的打印预览的屏幕截图: 我想在居住地址和永久地址之间留出一些空间。要做到这一点,我需要知道有多少行被字包装。 这是我的问题正在进行换行,但行距不正确我只想知道如何计算已被wo
我想在居住地址和永久地址之间留出一些空间。要做到这一点,我需要知道有多少行被字包装。
这是我的问题正在进行换行,但行距不正确我只想知道如何计算已被word包装的行数,以便运行函数在两个字段之间执行适当的行距
- 对于字符串“abcdefghijklmnopqrstuvxyz”
- 如果页面边距每行仅允许10个字符,则
- 输出应该是
ABCDEFGHIJ
KLMNOPQRST
UVWXYZ - 并且使用的行数,由变量linesFilled(比如)存储,应该=3
- 输出应该是
- 如果页面边距每行仅允许10个字符,则
- 显然,这只是一个简单的例子。在实际操作中,我希望每行没有字符限制。相反,我希望MeasureString自动知道一行中适合的单词数量,然后将其余不适合下一个连续行的单词进行换行供您参考:我已经做了很多。你看,我寻求你的帮助只是为了知道如何获得单词包装的行数。这是一个非常棘手的问题
示例输出供您参考:
目前,stringSize.Width的输出为114.226。
正如一些评论中所建议的那样,
我尝试输出填充的行,而不是stringSize.Width,输出为5
另一个建议是尝试int numLines=Convert.ToInt32(数学天花板(layoutSize.Width/stringSize.Width))这给了我输出7
。请有人帮帮我
我欢迎:
- 扩充和增强我的第一个代码的解决方案,以生成正确的换行字作为字符串输出:“Damodarmarg,Kusunti,Inner Ringroad,Lalitpur,Bagmati,Nepal”(应该是2)
- 可以修改我的第二个代码的解决方案,也可以生成已进行文字包装的行数(这种解决方案太棒了!!)
- 创造性解决方案:一种将输入作为字符串,并将该字符串包装到边距的解决方案,还可以生成word包装的行数。(或者,您认为解决此问题的任何方法也有效!)
我的规格不严格。你可以用任何你喜欢的方法来解决这个问题! 我已对我的问题进行了编辑,以尽可能包含更多细节。如果你喜欢整个模块,你也可以简单地问我。我希望有一个解决办法。谢谢 我想你是说
textBox2.Text = Convert.ToString(linesFilled);
而不是
textBox2.Text = Convert.ToString(stringSize.Width);
编辑:尝试以下操作:
int numLines = Convert.ToInt32(Math.Ceiling(layoutSize.Width / stringSize.Width));
不确定这是否是您要查找的内容,但在使用打印对话框时,您可以执行类似的操作,以显示页面上的字符数以及字符串每页占用的行数:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;
// Sets the value of charactersOnPage to the number of characters
// of stringToPrint that will fit within the bounds of the page.
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);
}
e、 我相信大小对你会有好处的。然后,只需取“charactersOnPage”值并将其除以“linesPerPage”即可获得适合一行的字符数:
var charactersPerLine = charactersOnPage / linesPerPage;
一旦你有了“charactersPerLine”,你就可以完成你想做的其他事情。听起来像是StringBuilder的工作。。。只需在每个字符上循环,放置一个换行符,并每80或w增加一次计数
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
int charactersOnPage = 0;
int linesPerPage = 0;
// Sets the value of charactersOnPage to the number of characters
// of stringToPrint that will fit within the bounds of the page.
e.Graphics.MeasureString(stringToPrint, this.Font,
e.MarginBounds.Size, StringFormat.GenericTypographic,
out charactersOnPage, out linesPerPage);
}
var charactersPerLine = charactersOnPage / linesPerPage;