Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delete Lines From Beginning of Multiline Textbox in C#

Is there a graceful way in C# to delete multiple lines of text from the beginning of a multiline textbox? I am using Microsoft Visual C# 2008 Express Edition.

EDIT - Additional Details The multiline textbox in my application is disabled (i.e. it is only editable by the application itself), and every line is terminated with a "\r\n".

like image 705
Jim Fell Avatar asked Jan 06 '10 17:01

Jim Fell


3 Answers

This is an incomplete question. So assuming you are using either TextBox or RichTextBox you can use the Lines property found inTextBoxBase.

//get all the lines out as an arry
string[] lines = this.textBox.Lines;

You can then work with this array and set it back.

  this.textBox.Lines= newLinesArray;

This might not be the most elegant way, but it will remove the first line. EDIT: you don't need select, just using skip will be fine

    //number of lines to remove from the beginning
    int numOfLines = 30; 
    var lines = this.textBox1.Lines;
    var newLines = lines.Skip(numOfLines);

    this.textBox1.Lines = newLines.ToArray();
like image 117
Stan R. Avatar answered Oct 30 '22 20:10

Stan R.


This solution works for me in WPF:

while (LogTextBox.LineCount > Constants.LogMaximumLines)
{
    LogTextBox.Text = LogTextBox.Text.Remove(0, LogTextBox.GetLineLength(0));
}

You can replace LogTextBox with the name of your text box, and Constants.LogMaximumLines with the maximum number of lines you would like your text box to have.

like image 29
Vlad Sabev Avatar answered Oct 30 '22 19:10

Vlad Sabev


Unfortunately, no, there is no "elegant" way to delete lines from the text of a multiline TextBox, regardless of whether you are using ASP.NET, WinForms, or WPF/Silverlight. In every case, you build a string that does not contain the lines you don't want and set the Text property.

WinForms will help you a little bit by pre-splitting the Text value into lines, using the Lines property, but it's not very helpful because it's a string array, and it's not exactly easy to delete an element of an array.

Generally, this algorithm will work for all possible versions of the TextBox class:

var lines = (from item in myTextBox.Text.Split('\n') select item.Trim());
lines = lines.Skip(numLinesToSkip);
myTextBox.Text = string.Join(Environment.Newline, lines.ToArray());

Note: I'm using Environment.Newline specifically for the case of Silverlight on a Unix platform. For all other cases, you're perfectly fine using "\r\n" in the string.Join call.

Also, I do not consider this an elegant solution, even though it's only 3 lines. What it does is the following:

  • splits the single string into an array of strings
  • iterates over that array and builds a second array that does not include the lines skipped
  • joins the array back into a single string.

I do not consider it elegant because it essentially builds two separate arrays, then builds a string from the second array. A more elegant solution would not do this.

like image 20
Randolpho Avatar answered Oct 30 '22 19:10

Randolpho