Существует ли корректный путь в C# для удаления нескольких строк текста с начала многострочного текстового поля? Я использую Microsoft Visual C# 2008 Express Edition.
РЕДАКТИРОВАНИЕ - Дополнительные Детали, многострочное текстовое поле в моем приложении отключено (т.е. это только доступно для редактирования самим приложением) и каждая строка завершаются с "\r\n".
Это неполный вопрос. Предполагая, что вы используете TextBox или RichTextBox, вы можете использовать свойство Lines, найденное вTextBoxBase .
//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();
Следует помнить, что коллекция Lines в TextBox не точно отражает то, что пользователь видит в строках. Коллекция Lines в основном работает вне возврата каретки, в то время как пользователь может видеть линии, обернутые из одной линии в другую без возврата каретки. Это может быть или не быть желаемым поведением.
Например, пользователь увидит внизу три строки, но коллекция Lines покажет 2 (так как возвращается только 2 каретки):
This is line number
one.
This is line 2.
Также, если форма и текстовый элемент управления изменяют размер, видимые строки в тексте будут меняться по мере того, как элемент управления растет или уменьшается.
Несколько лет назад я написал статью в блоге о том, как определить количество строк в текстовом поле по мере того, как пользователь их видит, и получить индекс данной строки (как получить строку в индексе: http://ryanfarley.com/blog/archive/2004/04/07/511.aspx, возможно, этот пост поможет.
К сожалению, нет, не существует "элегантного" способа удаления строк из текста многострочного TextBox, независимо от того, используете ли вы ASP.NET, WinForms или WPF / Silverlight. В каждом случае вы создаете строку, не содержащую ненужных строк, и устанавливаете свойство Text.
WinForms немного поможет вам, предварительно разделив текстовое значение на строки, используя свойство Lines, но это не очень полезно, потому что это строковый массив, а удалить элемент массива не совсем просто.
Как правило, этот алгоритм будет работать для всех возможных версий класса 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());
Примечание: я использую Environment.Newline специально для случая Silverlight на платформе Unix. Во всех остальных случаях вы вполне можете использовать "\ r \ n" в вызове string.Join.
Кроме того, я не считаю это элегантным решением, хотя это всего лишь 3 строки. Он делает следующее:
Я не считаю это элегантным, потому что он, по сути, строит два отдельных массива, а затем строит строку из второго массива. Более элегантное решение этого не сделает.