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