.NET - RichTextBox中3,510个字符后长行被换行

8
我在一个WinForms程序中使用了RichTextBox控件。当某一行的长度超过3,510个字符时,它会自动换行。虽然我将WordWrap属性设置为false,但是长度小于该值的所有行仍然可以正常扩展而不会换行。以前我解决这个问题的方法是将RightMargin设置为一个很高的数字,比如100,000,这种方法仍然有效。但现在我使用的是Windows 7而不是XP,当我滚动文本框时,会出现滚动条,就好像文本框中有那么长的行一样,而实际上并没有。
要重现此问题,请创建一个带有RichTextBox和Button的winforms程序。在按钮的点击事件中添加以下内容:
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 3511; i++)
            sb.Append('A');
        richTextBox1.Text = sb.ToString();

在查看包装后,将文本框的RightMargin更改为100000,并注意到即使在运行程序之前(仅在7和可能的Vista上),出现了滚动条。该行不再换行,但我希望滚动条仅对框中的文本起作用,而不是一些预定长度。


2
有没有更好的方法来实现这个功能,而不是强制用户滚动那么多来查看数据? - Aaron McIver
1
我复现了。看起来是故意的,修复起来非常昂贵。 - Hans Passant
@Hans 是的,我的理解也是根据字体大小而定... 根据字体属性,你可以获得比3510更多或更少的值,而不是一个固定值。 - Aaron McIver
1
@Aaron 我的程序是一个文本文件查看器,因此它需要能够准确地显示文件中的所有内容。有一些罕见的分隔符或固定宽度的文件,它们的行长度超过了常规长度,我需要确保它们能够正确地显示。 - Jeffrey Harmon
理解你想提供一份副本;然而,仍有线索和方法可以提供这个副本,但同时通知用户该行在X点继续,并将其移到另一行等等... 使用户界面友好;仅仅因为文本行的长度为N个字符,并不意味着用户界面必须将它们以单个连续行的形式显示出来,从而迫使用户无限滚动。 - Aaron McIver
1个回答

8
您可以将richTextBox的rightmargin设置为字符串的宽度吗?像这样:
richTextBox1.RightMargin = 
TextRenderer.MeasureText(sb.ToString(), this.richTextBox1.Font).Width;

谢谢!我希望只是有一个设置,但我可以循环遍历文本框中的每一行,找到最长的行,然后将其设置为那个长度。 - Jeffrey Harmon
这是它所接受的最大值:143165576。 - Ronen Festinger
输入0将会得到相同的结果。对于非常长的行仍然会进行换行。 - Ronen Festinger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接