从C#中的多行文本框的开头删除行

Jim*_*ell 11 c# textbox multiline

在C#中有一种优雅的方式可以从多行文本框的开头删除多行文本吗?我使用的是Microsoft Visual C#2008 Express Edition.

编辑 - 其他详细信息 我的应用程序中的多行文本框被禁用(即它只能由应用程序本身编辑),并且每行都以"\ r \n"结束.

Sta*_* R. 15

这是一个不完整的问题.因此,假设您使用的是TextBox或RichTextBox,则可以使用在TextBoxBase中找到Lines属性.

//get all the lines out as an arry
string[] lines = this.textBox.Lines;
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用此数组并将其设置回来.

  this.textBox.Lines= newLinesArray;
Run Code Online (Sandbox Code Playgroud)

这可能不是最优雅的方式,但它将删除第一行. 编辑:你不需要选择,只需使用跳过就可以了

    //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();
Run Code Online (Sandbox Code Playgroud)


Vla*_*bev 8

这个解决方案适用于WPF:

while (LogTextBox.LineCount > Constants.LogMaximumLines)
{
    LogTextBox.Text = LogTextBox.Text.Remove(0, LogTextBox.GetLineLength(0));
}
Run Code Online (Sandbox Code Playgroud)

您可以使用文本框的名称替换LogTextBox,使用您希望文本框具有的最大行数的Constants.LogMaximumLines.


Ran*_*pho 5

遗憾的是,不管是否使用ASP.NET,WinForms或WPF/Silverlight,都没有"优雅"的方法从多行TextBox的文本中删除行.在每种情况下,您构建一个不包含您不想要的行的字符串并设置Text属性.

的WinForms会帮你一点点的预裂文本值成线,用线属性,但因为它是一个字符串数组,这是不太容易删除一个数组的元素是不是非常有帮助.

通常,此算法适用于TextBox类的所有可能版本:

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

注意:我在Unix平台上专门针对Silverlight的情况使用Environment.Newline.对于所有其他情况,在string.Join调用中使用"\ r \n"完全没问题.

此外,我不认为这是一个优雅的解决方案,即使它只有3行.它的作用如下:

  • 将单个字符串拆分为字符串数组
  • 迭代该数组并构建第二个不包含跳过的行的数组
  • 将数组连接回一个字符串.

我不认为它很优雅,因为它本质上构建了两个独立的数组,然后从第二个数组构建一个字符串.更优雅的解决方案不会这样做.