Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中字符串溢出的换行符,并给出已换行的行数_C#_Winforms - Fatal编程技术网

C#中字符串溢出的换行符,并给出已换行的行数

C#中字符串溢出的换行符,并给出已换行的行数,c#,winforms,C#,Winforms,从这两个问题(这是我的 我试图解决,但遇到了一些问题 看看我被困在哪里!! 我已成功地使用代码将此字符串“Damodarrg,Kusunti,Inside Ringroad,Lalitpur,Bagmati,Nepal”用word包装起来(请参见我的第二个代码) 但我不知道如何获得已包装的行数。(因为它会自动包装) 这是我的打印预览的屏幕截图: 我想在居住地址和永久地址之间留出一些空间。要做到这一点,我需要知道有多少行被字包装。 这是我的问题正在进行换行,但行距不正确我只想知道如何计算已被wo

从这两个问题(这是我的 我试图解决,但遇到了一些问题

看看我被困在哪里!!
  • 我已成功地使用代码将此字符串“Damodarrg,Kusunti,Inside Ringroad,Lalitpur,Bagmati,Nepal”用word包装起来(请参见我的第二个代码)
  • 但我不知道如何获得已包装的行数。(因为它会自动包装)
  • 这是我的打印预览的屏幕截图:



    我想在居住地址和永久地址之间留出一些空间。要做到这一点,我需要知道有多少行被字包装。

    这是我的问题正在进行换行,但行距不正确我只想知道如何计算已被word包装的行数,以便运行函数在两个字段之间执行适当的行距

  • 我想知道被单词包装的行数(你可以在上面的截图中看到,这里显然是=2)
  • 为什么我需要这个号码?==>如果x是word包装的行数,我希望执行函数newline()x的次数。这就是为什么。这是我自己的功能,其目的是纠正不同字段之间的行距
  • 例子:
    • 对于字符串“abcdefghijklmnopqrstuvxyz”
      • 如果页面边距每行仅允许10个字符,则

        • 输出应该是

          ABCDEFGHIJ
          KLMNOPQRST
          UVWXYZ
        • 并且使用的行数,由变量linesFilled(比如)存储,应该=3
    • 显然,这只是一个简单的例子。在实际操作中,我希望每行没有字符限制。相反,我希望MeasureString自动知道一行中适合的单词数量,然后将其余不适合下一个连续行的单词进行换行供您参考:我已经做了很多。你看,我寻求你的帮助只是为了知道如何获得单词包装的行数。这是一个非常棘手的问题
    到目前为止,我所尝试的: 第一个代码: 我的代码如下所示(用于行计数;您需要帮助我进行此操作)

    所以,这第一个代码应该给我打印页边距周围的行数。当前只给出占据整行的字符串部分的宽度,而不是该字符串占据的行数(我可以得到一个知道行数的方法吗?

    第二个代码: 第二个代码有助于我们在字符串不符合页边距的情况下对其进行包装(这第二个代码目前运行良好。它会自动将不符合一行的文本包装到下一个连续行,但不会告诉我有多少行已进行了文字包装。这就是我的问题。

    注意:newline()是我自己的函数,调用时只留下一行。pagemarginX设置适当的边际。就这些。不要困惑。至于为什么我没有在我的第一个代码中使用DrawString;我一直在使用这两种代码。这是用来显示字符串的代码,也是用来计算字符串中行数的第一个代码。我没法数出这一行的行数。很抱歉给你带来了困惑



    示例输出供您参考:

    目前,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;