繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM