4

这是我第一次就这项令人惊叹的服务发布问题,因为今天它通过阅读它对我有很大帮助。

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

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

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

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

4

3 回答 3

6

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

    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
    //... 

请注意,行尾包含在lines中。

于 2012-10-01T23:23:34.867 回答
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);
}
于 2012-10-02T01:19:19.697 回答
0

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

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

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

于 2012-10-01T22:59:19.280 回答