在C#中,是否有一种优雅的方式从多行文本框的开头删除多行文本? 我正在使用Microsoft Visual C# 2008 Express Edition。
编辑 - 额外说明 我的应用程序中的多行文本框是禁用的(即仅由应用程序本身进行编辑),每行都以“\r\n”结尾。
这是一个不完整的问题。假设您正在使用TextBox或RichTextBox,您可以使用在TextBoxBase中找到的Lines属性。
//get all the lines out as an arry
string[] lines = this.textBox.Lines;
你可以使用这个数组并将其设置回去。 this.textBox.Lines= newLinesArray;
这可能不是最优雅的方式,但它将删除第一行。 编辑:您无需使用 select,只使用 skip 就可以了。
//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();
while (LogTextBox.LineCount > Constants.LogMaximumLines)
{
LogTextBox.Text = LogTextBox.Text.Remove(0, LogTextBox.GetLineLength(0));
}
var lines = (from item in myTextBox.Text.Split('\n') select item.Trim());
lines = lines.Skip(numLinesToSkip);
myTextBox.Text = string.Join(Environment.Newline, lines.ToArray());
记住一件事,TextBox的Lines集合并不准确地反映用户所看到的行。Lines集合基本上是根据回车符来工作的,而用户可能会看到一行从一行自动换行到下一行,而没有回车符。这可能是您想要的行为,也可能不是。
例如,用户会将以下内容视为三行,但Lines集合将显示2行(因为只有2个回车符):
This is line number
one.
This is line 2.
此外,如果表单和文本控件可调整大小,则文本中可见的行数将随着控件的增长或缩小而改变。
我几年前写了一篇关于如何确定文本框中用户看到的行数并获取给定行的索引的博客文章(例如获取索引处的行:http://ryanfarley.com/blog/archive/2004/04/07/511.aspx),也许这篇文章会有所帮助。
if (txtLog.Lines.Length > maxNumberLines)
{
txtLog.Lines = txtLog.Lines.Skip(txtLog.Lines.Length - maxNumberLines).ToArray();
}