在C#中更改多行文本框的特定行

时间:2017-05-22 12:06:04

标签: c# winforms textbox

我无法更改多行TextBox的特定字符串。

假设多行文本框的第一行是"Hello"&第二行是"Bye"。但是当我试图改变第二行的值时,如下所示。

textBox1.Lines[1] = "Good bye";

当我使用调试模式看到结果时,它不是"再见"。

我还阅读了这篇MSDN文章&这个stackoverflow问题但无法得到理想的答案。

4 个答案:

答案 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;
}