我无法更改多行文本框中特定字符串。
假设多行文本框的第一行是“Hello”,第二行是“Bye”。但是当我尝试像下面这样更改第二行的值时:
textBox1.Lines[1] = "Good bye";
当我在调试模式下查看结果时,它不是“Good bye”。
我也阅读了这篇MSDN文章和这个stackoverflow问题,但是没有得到想要的答案。
我无法更改多行文本框中特定字符串。
假设多行文本框的第一行是“Hello”,第二行是“Bye”。但是当我尝试像下面这样更改第二行的值时:
textBox1.Lines[1] = "Good bye";
当我在调试模式下查看结果时,它不是“Good bye”。
我也阅读了这篇MSDN文章和这个stackoverflow问题,但是没有得到想要的答案。
var lines = TextBox1.Lines;
lines[1] = "GoodBye";
TextBox1.Lines = lines;
或者,你可以像Wolle建议的那样替换文本
首先,您需要将textBox1.Lines
数组分配给变量。
string[] lines = textBox1.Lines;
改变数组的值
lines[1] = "Good bye";
textBox1.Lines=lines;
使用Lines
属性处理TextBox
的行非常低效。通过Text
属性处理行会稍微好一些,但也不够高效。
下面是代码片段,可以替换TextBox
中的一行而无需重写整个内容:
public static bool ReplaceLine(TextBox box, int lineNumber, string text)
{
int first = box.GetFirstCharIndexFromLine(lineNumber);
if (first < 0)
return false;
int last = box.GetFirstCharIndexFromLine(lineNumber + 1);
box.Select(first,
last < 0 ? int.MaxValue : last - first - Environment.NewLine.Length);
box.SelectedText = text;
return true;
}
Lines
遍历字符数组,没有任何显著的性能问题。我想看到三倍时间的例子,特别是在现实数据中,而不是2GB的字符。而且,毕竟,如果文本框文本是应用程序的瓶颈,那么一个人应该放弃编程。 - Nino var lines = textBox.Text.Split(new[] { '\r', '\n' }).Where(x => x.Length > 0);
textBox.Text = textBox.Text.Replace(lines.ElementAt(1), "Good bye");