TextBox Word-Wrapping将字符串拆分为行

时间:2012-10-01 22:48:29

标签: c# string textbox word-wrap

这是我第一次在这个惊人的服务上发布问题,因为今天它只是通过阅读它帮助了我很多。

目前,我正在制作小型C#应用程序,我需要使用大量的TextBox。 在TextBox属性中,我检查了 MultiLine Word-Wrap 函数。 因此,当用户输入文本时,它会以多行显示。

我的问题是如何在字符串列表中显示那些显示在表单上的行,而不是一个大字符串。

我尚未区分天气自动换行功能会在每行的末尾添加新行或添加“\ n \ r”。 我试图从 TextBox.Lines 获取行,但它只有TextBox.Lines [0],其中包含整个字符串形式TextBox

我已经尝试了很多东西并研究了很多资源,但我仍然没有找到解决这个问题的正确方法。

3 个答案:

答案 0 :(得分:6)

这里有很多角落案例。您想要使用的核心方法是TextBox.GetFirstCharIndexFromLine(),它允许您在TextBox应用WordWrap属性后迭代这些行。 Boilerplate代码:

    var lines = new List<string>();
    for (int line = 0; ;line++) {
        var start = textBox1.GetFirstCharIndexFromLine(line);
        if (start < 0) break;
        var end = textBox1.GetFirstCharIndexFromLine(line + 1);
        if (end == -1 || start == end) end = textBox1.Text.Length;
        lines.Add(textBox1.Text.Substring(start, end - start));
    }
    // Do something with lines
    //... 

请注意,行尾包含在中。

答案 1 :(得分:3)

可以获取行数并直接构建行数组。这包括由WordWrap生成的行。

// Get the line count then loop and populate array
int lineCount = textBox1.GetLineFromCharIndex(textBox1.Text.Length) + 1;

// Build array of lines
string[] lines = new string[lineCount];
for (int i = 0; i < lineCount; i++)
{
    int start = textBox1.GetFirstCharIndexFromLine(i);
    int end = i < lineCount - 1 ? 
        textBox1.GetFirstCharIndexFromLine(i + 1) :
        textBox1.Text.Length;                            
    lines[i] = textBox1.Text.Substring(start, end - start);
}

答案 2 :(得分:0)

你可以拿出单string,然后用它做任何你想做的事。

根据分隔符将字符串拆分为字符串列表非常简单:

https://stackoverflow.com/a/1814568/13895