2011-12-16 73 views
44

Tôi làm cách nào để thêm một dòng văn bản vào một số multi-lineTextBox?Làm cách nào để thêm một dòng vào một Hộp văn bản nhiều dòng?

ví dụ: mã giả;

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

hoặc

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"); 

Các phương pháp duy nhất mà TextBox.Lines cụ (mà tôi có thể nhìn thấy) là:

  • Clone
  • CopyTo
  • Equals
  • GetType
  • GetHashCode
  • GetEnumerator
  • Initialize
  • GetLowerBound
  • GetUpperBound
  • getLength
  • GetLongLength
  • GetValue
  • SetValue
  • ToString

enter image description here

+1

bạn không thể sử dụng phụ thêm (Enviroment.NewLine) ?? – jclozano

+1

TextBox.Lines là một đại diện chỉ đọc của văn bản. Vui lòng tham khảo http://msdn.microsoft.com/en-us/library/system.windows.forms.textboxbase.lines.aspx. – Casperah

+0

@Casperah Ohhh, giúp giải thích lý do tại sao nó không thể được sử dụng để làm những gì tôi muốn - Microsoft là (một cách không quá tinh tế) ngăn cản bạn thực hiện một đường dẫn mã chậm hơn –

Trả lời

90

@Casperah đã chỉ ra rằng tôi đang suy nghĩ sai. A TextBox không dòng, nó có văn bản. Văn bản đó có thể được chia thành CRLF thành các dòng, nếu được yêu cầu - nhưng không có khái niệm về các dòng.

Câu hỏi sau đó là cách thực hiện những gì tôi muốn, thay vì những gì WinForms cho phép tôi.

biến thể cho khác có một lỗi tinh tế:

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

Họ hoặc thêm hoặc thêm vào trước một dòng mới khi một (có thể) không được yêu cầu.

Vì vậy, mở rộng helper:

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); 
    } 
} 

Vì vậy, bây giờ:

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

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

Note: Bất kỳ mã được phát hành vào phạm vi công cộng. Không yêu cầu ghi nhận tác giả.

+0

Lưu ý: string.Format ("\ r \ n") sẽ * không * hoạt động. – ouflak

13

Nối một \r\n vào chuỗi để đưa các văn bản trên một dòng mới.

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

Điều này sẽ tạo hai mục nhập trên các dòng riêng biệt.

+4

Nó sẽ không hoạt động, điều khiển 'TextBox' sẽ không xử lý đúng' \ n', bạn phải sử dụng '\ r \ n' cho điều đó, hãy kiểm tra chính mình – Vamsi

+0

Cuộc gọi tốt @VamsiKrishna –

+0

Hoặc' Environment.NewLine' – Jack

0

Chỉ cần đặt ngắt dòng vào văn bản của bạn.

Bạn không thêm dòng dưới dạng phương thức. Multiline chỉ hỗ trợ việc sử dụng các ngắt dòng.

15

tôi sẽ đi với System.Environment.NewLine hoặc một StringBuilder

Sau đó, bạn có thể thêm đường với một người thợ xây chuỗi như thế này:

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

textbox1.Text += sb.ToString(); 

hoặc xuống dòng như thế này:

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

Có thể nó phải có sb.AppendLine ("nâu") ... – Casperah

+0

có điểm tốt! – Matt

+0

Câu trả lời hay, nhưng tên hàm tạo giống với tên lớp - StringBuilder (d mất tích) :) –

5

Hãy thử điều này

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

bạn cũng có thể thử

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

đâu \r là vận chuyển trở lại và \n là dòng mới

3

Bạn phải sử dụng các phương pháp AppendText của hộp văn bản trực tiếp.Nếu bạn cố gắng sử dụng thuộc tính Text, hộp văn bản sẽ không cuộn xuống khi dòng mới được thêm vào.

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

Thuộc tính "Đường" của một hộp văn bản là một chuỗi các chuỗi. Theo định nghĩa, bạn không thể thêm các phần tử vào số string[] hiện tại, như bạn có thể vào một số List<string>. Đơn giản là không có phương pháp nào có sẵn cho mục đích này. Thay vào đó, bạn phải tạo một string[] mới dựa trên tham chiếu Dòng hiện tại và gán nó cho Đường.

Sử dụng một chút LINQ (NET 3.5 hoặc mới hơn):

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

Mã này là tốt cho việc thêm một dòng mới tại một thời điểm dựa trên sự tương tác của người dùng, nhưng đối với khởi tạo một textbox với vài chục mới dòng, nó sẽ thực hiện rất kém. Nếu bạn đang thiết lập giá trị ban đầu của một TextBox, tôi sẽ thiết lập thuộc tính Text trực tiếp bằng cách sử dụng một StringBuilder (như các câu trả lời khác đã đề cập), hoặc nếu bạn được đặt trên thao tác thuộc tính Lines, hãy sử dụng một List để biên dịch bộ sưu tập của các giá trị và sau đó chuyển đổi nó thành một mảng để gán cho các dòng:

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(); 

Thậm chí sau đó, vì mảng Lines là thuộc tính được tính toán, điều này liên quan đến rất nhiều chuyển đổi không cần thiết đằng sau hậu trường.

0

Nếu bạn biết bạn muốn bao nhiêu dòng, hãy tạo một chuỗi Chuỗi với nhiều thành viên đó (ví dụ: myStringArray). Sau đó sử dụng myListBox.Lines = myStringArray;

1

Việc thêm Environment.NewLine hoặc \r\n không hoạt động đối với tôi, ban đầu, với hộp văn bản của tôi. Tôi thấy rằng tôi đã quên đi vào các thuộc tính Hành vi của hộp văn bản và đặt thuộc tính "Multiline" thành "True" để thêm dòng! Tôi chỉ nghĩ rằng tôi muốn thêm caveat này kể từ khi không ai khác đã làm trong các câu trả lời, ở trên, và tôi đã nghĩ rằng hộp đã được chỉ cần tự động mở rộng và quên tôi cần thiết để thực sự thiết lập các tài sản Mulitline cho nó để làm việc. Tôi biết đó là một thứ đầu xương (đó là một thứ xảy ra với chúng tôi vào cuối buổi chiều thứ Sáu), nhưng nó có thể giúp ai đó nhớ kiểm tra điều đó. Ngoài ra, trong phần Giao diện là thuộc tính "ScrollBars" mà tôi cần thiết để đặt thành "Cả hai", để có được cả hai thanh ngang và dọc để văn bản có thể thực sự được cuộn và nhìn thấy toàn bộ. Vì vậy, câu trả lời ở đây không chỉ là mã số bằng cách thêm Environment.NewLine hoặc \r\n vào số .Text, mà còn đảm bảo hộp của bạn được thiết lập đúng với thuộc tính phù hợp.

0

Phương pháp trên không hiệu quả đối với tôi. Tôi có ngoại lệ sau:

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

Tắt tôi cần gọi Invoke trên điều khiển của tôi trước. Xem câu trả lời here.

Các vấn đề liên quan