[英]Change Particular line of Multiline textbox in C#
我无法更改多行TextBox的特定字符串。
假设多行文本框的第一行是"Hello"
,第二行是"Bye"
。但是当我试图改变第二行的值时,如下所示。
textBox1.Lines[1] = "Good bye";
当我使用调试模式看到结果时,它不是“再见”。
我也阅读了这篇MSDN文章和这个stackoverflow问题,但无法得到理想的答案。
正如MSDN所述(您提供的链接):
默认情况下,行集合是TextBox中行的只读副本。 要获得可写的行集合,请使用类似于以下内容的代码:textBox1.Lines = new string [] {“abcd”};
因此,您必须“获取” Lines
集合,更改它,然后返回TextBox
。 这可以这样实现:
var lines = TextBox1.Lines;
lines[1] = "GoodBye";
TextBox1.Lines = lines;
或者,您可以替换文本,如Wolle建议的那样
首先,您需要在变量中指定textBox1.Lines
数组
string[] lines = textBox1.Lines;
更改数组值
lines[1] = "Good bye";
将数组重新分配给文本框
textBox1.Lines=lines;
根据MSDN
默认情况下,行集合是TextBox中行的只读副本。 要获得可写的行集合,需要分配新的字符串数组
您可以尝试替换第二行的文本,如下所示:
var lines = textBox.Text.Split(new[] { '\r', '\n' }).Where(x => x.Length > 0);
textBox.Text = textBox.Text.Replace(lines.ElementAt(1), "Good bye");
通过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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.