这是我第一次在这个惊人的服务上发布问题,因为今天它只是通过阅读它帮助了我很多。
目前,我正在制作小型C#应用程序,我需要使用大量的TextBox。 在TextBox属性中,我检查了 MultiLine 和 Word-Wrap 函数。 因此,当用户输入文本时,它会以多行显示。
我的问题是如何在字符串列表中显示那些显示在表单上的行,而不是一个大字符串。
我尚未区分天气自动换行功能会在每行的末尾添加新行或添加“\ n \ r”。 我试图从 TextBox.Lines 获取行,但它只有TextBox.Lines [0],其中包含整个字符串形式TextBox
我已经尝试了很多东西并研究了很多资源,但我仍然没有找到解决这个问题的正确方法。
答案 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)