我无法更改多行TextBox的特定字符串。
假设多行文本框的第一行是"Hello"
&第二行是"Bye"
。但是当我试图改变第二行的值时,如下所示。
textBox1.Lines[1] = "Good bye";
当我使用调试模式看到结果时,它不是"再见"。
我还阅读了这篇MSDN文章&这个stackoverflow问题但无法得到理想的答案。
答案 0 :(得分:2)
正如MSDN所述(您提供的链接):
默认情况下,行集合是TextBox中行的只读副本。 要获得可写的行集合,请使用代码 类似于以下内容:textBox1.Lines = new string [] {“abcd”};
因此,您必须“接受”Lines
集合,进行更改,然后返回TextBox
。这可以这样实现:
var lines = TextBox1.Lines;
lines[1] = "GoodBye";
TextBox1.Lines = lines;
或者,您可以替换文字,例如Wolle suggested
答案 1 :(得分:1)
首先,您需要在变量
中指定textBox1.Lines
数组
string[] lines = textBox1.Lines;
更改数组值
lines[1] = "Good bye";
将数组重新分配到文本框
textBox1.Lines=lines;
根据MSDN
默认情况下,行集合是行的只读副本 在TextBox中。要获得可写的行集合需要分配 新字符串数组
答案 2 :(得分:0)
您可以尝试替换第二行的文字,如下所示:
var lines = textBox.Text.Split(new[] { '\r', '\n' }).Where(x => x.Length > 0);
textBox.Text = textBox.Text.Replace(lines.ElementAt(1), "Good bye");
答案 3 :(得分:0)
通过TextBox
属性处理Lines
行非常无效。通过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;
}