簡體   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