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

C# 更改C中多行文本框的特定行#,c#,winforms,textbox,C#,Winforms,Textbox,我无法更改多行文本框的特定字符串 假设多行文本框的第一行是“Hello”,第二行是“Bye” textBox1.Lines[1]=“再见” 当我看到使用调试模式的结果时,它不是“再见” 我也读了这篇文章&这个问题,但没有得到想要的答案。你可以试着像这样替换第二行的文本: var lines = textBox.Text.Split(new[] { '\r', '\n' }).Where(x => x.Length > 0); textBox.Text = textBo

我无法更改多行文本框的特定字符串

假设多行文本框的第一行是
“Hello”
,第二行是
“Bye”

textBox1.Lines[1]=“再见”

当我看到使用调试模式的结果时,它不是“再见”


我也读了这篇文章&这个问题,但没有得到想要的答案。

你可以试着像这样替换第二行的文本:

    var lines = textBox.Text.Split(new[] { '\r', '\n' }).Where(x => x.Length > 0);
    textBox.Text = textBox.Text.Replace(lines.ElementAt(1), "Good bye");
var lines = TextBox1.Lines;
lines[1] = "GoodBye";
TextBox1.Lines = lines;

首先,您需要在变量中指定
textBox1.Lines
数组

string[] lines = textBox1.Lines; 
更改数组值

lines[1] = "Good bye"; 
将数组重新指定给文本框

textBox1.Lines=lines; 

默认情况下,行集合是行的只读副本 在文本框中。要获取可写的行集合,需要分配 新字符串数组

正如MSDN所述(您提供的链接):

默认情况下,行集合是文本框中行的只读副本。 要获取可写的行集合,请使用代码 与以下内容类似:textBox1.Lines=新字符串[]{“abcd”}

因此,您必须“获取”
集合,更改它,然后返回到
文本框
。可以这样实现:

    var lines = textBox.Text.Split(new[] { '\r', '\n' }).Where(x => x.Length > 0);
    textBox.Text = textBox.Text.Replace(lines.ElementAt(1), "Good bye");
var lines = TextBox1.Lines;
lines[1] = "GoodBye";
TextBox1.Lines = lines;

或者,您可以替换文本,例如通过
属性使用
文本框
无效。通过
Text
属性处理行稍微好一点,但也无效

下面是代码段,它允许您替换
文本框
中的一行,而无需重写整个内容:

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;
}
public static bool ReplaceLine(文本框、整数行号、字符串文本)
{
int first=box.GetFirstCharIndexFromLine(行号);
如果(第一次<0)
返回false;
int last=box.GetFirstCharIndexFromLine(行号+1);
框。选择(首先,
last<0?int.MaxValue:last-first-Environment.NewLine.Length);
box.SelectedText=文本;
返回true;
}

以这种方式使用行是一个非常糟糕的主意。因此,如果使用
无效,并且使用
文本
,您如何使用
文本框
?有可能吗?当表单上有两个文本框时,您是否需要一些额外的内存?两个文本框都包含1KB的字符是什么?有可能吗?找个朋友。是的,有可能。调查我的答案,寻找证据。至于通过
文本
工作,非常高的内存消耗(通过
工作时至少是三倍)并不是唯一的缺点。还有其他人。看来你没听明白这个笑话。我不认为你的方法有必要使代码复杂化,比如说,10行代码<代码>行
遍历没有任何重大性能问题的字符数组。我希望看到三倍时间的例子,特别是现实生活中的达拉,而不是两个角色。而且,毕竟,如果texbox文本是应用程序中的瓶颈,人们应该放弃编程,我明白了,但仍然确信使用正确的方法更好,好吧,几乎总是这样。当你通过
更新
文本框时,你不需要2gb的字符来感受痛苦,20-30kb的大量行就足够了,重置滚动位置和闪烁只需要很少的名字。好吧,我同意正确的方法,但另一方面,在文本框中放置超过10行是错误的方法。Textbox并不意味着包含电子书,所以通过索引访问它的行似乎过于工程化了。