簡體   English   中英

如何將一行添加到多行文本框?

[英]How to add a line to a multiline TextBox?

如何將一行文本添加到多行TextBox

例如偽代碼;

textBox1.Clear();
textBox1.Lines.Add("1000+");
textBox1.Lines.Add("750-999");
textBox1.Lines.Add("400-749");
...snip...
textBox1.Lines.Add("40-59");

或者

textBox1.Lines.Append("brown");
textBox1.Lines.Append("brwn");
textBox1.Lines.Append("brn");
textBox1.Lines.Append("brow");
textBox1.Lines.Append("br");
textBox1.Lines.Append("brw");
textBox1.Lines.Append("brwm");
textBox1.Lines.Append("bron");
textBox1.Lines.Append("bwn");
textBox1.Lines.Append("brnw");
textBox1.Lines.Append("bren");
textBox1.Lines.Append("broe");
textBox1.Lines.Append("bewn");

TextBox.Lines實現的唯一方法(我可以看到)是:

  • 克隆
  • 復制到
  • 等於
  • 獲取類型
  • 獲取哈希碼
  • 獲取枚舉器
  • 初始化
  • 獲取下界
  • 獲取上界
  • 獲取長度
  • 獲取長長度
  • 獲取值
  • 設定值
  • 字符串

在此處輸入圖片說明

@Casperah 指出我想錯了:

  • 一個TextBox沒有
  • 它有文字
  • 如果需要,該文本可以在 CRLF 上拆分成行
  • 但沒有線的概念

那么問題是如何完成我想要的,而不是 WinForms 讓我做什么。

其他給定的變體中存在細微的錯誤:

  • textBox1.AppendText("Hello" + Environment.NewLine);
  • textBox1.AppendText("Hello" + "\\r\\n");
  • textBox1.Text += "Hello\\r\\n"
  • textbox1.Text += System.Environment.NewLine + "brown";

當不需要(可能)不需要換行符時,它們會附加或預先添加換行符。

所以,擴展助手:

public static class WinFormsExtensions
{
   public static void AppendLine(this TextBox source, string value)
   {
      if (source.Text.Length==0)
         source.Text = value;
      else
         source.AppendText("\r\n"+value);
   }
}

所以現在:

textBox1.Clear();
textBox1.AppendLine("red");
textBox1.AppendLine("green");
textBox1.AppendLine("blue");

textBox1.AppendLine(String.Format("Processing file {0}", filename));

注意:任何代碼都發布到公共領域。 不需要歸屬。

我會使用System.Environment.NewLineStringBuilder

然后你可以用這樣的字符串構建器添加行:

StringBuilder sb = new StringBuilder();
sb.AppendLine("brown");
sb.AppendLine("brwn");

textbox1.Text += sb.ToString();

或 NewLine 像這樣:

textbox1.Text += System.Environment.NewLine + "brown";

更好的:

StringBuilder sb = new StringBuilder(textbox1.Text);
sb.AppendLine("brown");
sb.AppendLine("brwn");

textbox1.Text = sb.ToString();

\\r\\n附加到字符串以將文本放在新行上。

textBox1.Text += ("brown\r\n");
textBox1.Text += ("brwn");

這將在不同的行上生成兩個條目。

嘗試這個

textBox1.Text += "SomeText\r\n" 

你也可以試試

textBox1.Text += "SomeText" + Environment.NewLine;

\\r是回車, \\n是換行

您必須直接使用文本框的AppendText方法。 如果您嘗試使用Text屬性,文本框將不會在追加新行時向下滾動。

textBox1.AppendText("Hello" + Environment.NewLine);

TextBox 的“Lines”屬性是一個字符串數組。 根據定義,您不能向現有的string[]添加元素,就像添加到List<string> 根本沒有可用於此目的的方法。 您必須改為基於當前 Lines 引用創建一個新的string[] ,並將其分配給 Lines。

使用一點 Linq(.NET 3.5 或更高版本):

textBox1.Lines = textBox.Lines.Concat(new[]{"Some Text"}).ToArray();

這段代碼適合根據用戶交互一次添加一個新行,但對於用幾十個新行初始化文本框,它的性能會很差。 如果您要設置 TextBox 的初始值,我將直接使用 StringBuilder 設置 Text 屬性(如其他答案所述),或者如果您設置操作 Lines 屬性,請使用 List 來編譯集合值,然后將其轉換為數組以分配給 Lines:

var myLines = new List<string>();

myLines.Add("brown");
myLines.Add("brwn");
myLines.Add("brn");
myLines.Add("brow");
myLines.Add("br");
myLines.Add("brw");
...

textBox1.Lines = myLines.ToArray();

即便如此,由於 Lines 數組是一個計算屬性,這涉及到很多幕后不必要的轉換。

添加Environment.NewLine\\r\\n最初對我的文本框不起作用。 我發現我忘記進入文本框的Behavior屬性並將“ Multiline ”屬性設置為“ True ”以添加行! 我只是想我會添加這個警告,因為沒有其他人在上面的答案中做了,我原以為這個盒子會自動展開而忘記了我需要實際設置多線屬性才能讓它工作。 我知道這是一種愚蠢的事情(這是我們周五下午晚些時候發生的那種事情),但它可能有助於有人記得檢查一下。 此外,在外觀部分是“ScrollBars”屬性,我需要將其設置為“Both”,以獲取水平和垂直條,以便文本實際上可以滾動並完整地看到。 因此,這里的答案不僅僅是通過將Environment.NewLine\\r\\n附加到.Text ,還要確保您的框使用正確的屬性正確設置。

如果您知道需要多少行,請創建一個包含這么多成員的字符串數組(例如 myStringArray)。 然后使用 myListBox.Lines = myStringArray;

以上方法對我不起作用。 我得到以下異常:

Exception : 'System.InvalidOperationException' in System.Windows.Forms.dll

原來我需要先在我的控件上調用Invoke 請參閱此處的答案。

只需在文本中換行即可。

您不添加行作為方法。 Multiline 只支持使用換行符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM