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;
然后,您可以使用此数组并将其设置回来.
  this.textBox.Lines= newLinesArray;
这可能不是最优雅的方式,但它将删除第一行. 编辑:你不需要选择,只需使用跳过就可以了
    //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();
这个解决方案适用于WPF:
while (LogTextBox.LineCount > Constants.LogMaximumLines)
{
    LogTextBox.Text = LogTextBox.Text.Remove(0, LogTextBox.GetLineLength(0));
}
您可以使用文本框的名称替换LogTextBox,使用您希望文本框具有的最大行数的Constants.LogMaximumLines.
遗憾的是,不管是否使用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());
注意:我在Unix平台上专门针对Silverlight的情况使用Environment.Newline.对于所有其他情况,在string.Join调用中使用"\ r \n"完全没问题.
此外,我不认为这是一个优雅的解决方案,即使它只有3行.它的作用如下:
我不认为它很优雅,因为它本质上构建了两个独立的数组,然后从第二个数组构建一个字符串.更优雅的解决方案不会这样做.