2011-04-23 2 views
2

У меня есть несколько пустых строк в моем richbox, и мне нужно удалить их из rich.как удалить пустые строки из richbox

Я могу выполнить пустые строки, но не могу их удалить. как мне это сделать? Я использовал этот код, но он не работает:

RichTextBox rtfBox = new RichTextBox(); 
rtfBox.Rtf = SOME NTEXT DATA; 

int lineNumber = 0; 
foreach (string a in rtfBox.Lines) 
{ 
    if (a == "") 
    { 
     int start_index = rtfBox.GetFirstCharIndexFromLine(lineNumber); 
     int countLineChar = rtfBox.Lines[lineNumber].Length; 
     // Eat new line chars 
     if (lineNumber < rtfBox.Lines.Length - 1) 
     { 
      countLineChar += rtfBox.GetFirstCharIndexFromLine(lineNumber + 1) - 
       ((start_index + countLineChar - 1) + 1); 
     } 
     rtfBox.Text = rtfBox.Text.Remove(start_index, countLineChar); 
    } 
    else 
     lineNumber++; 
} 

эта линия rtfBox.Text = rtfBox.Text.Remove(start_index, countLineChar); не работают.

благодаря

Update

Спасибо всем, ваше предложение полезно, когда содержание richbox только текст, но у меня есть изображение и таблица в моем богатом тоже. когда я использую rtb.Text = или rtfBox.Text = или richTextBox1.Text = изображения и таблицы будут удалены из richbox.

+0

Пожалуйста, просто отредактируйте свой вопрос, если вам нужно предоставить дополнительную информацию. Кроме того, постарайтесь не использовать аббревиатуры «text speak» в ваших сообщениях. –

ответ

3

Это будет соответствовать любой строке, содержащей один из новых символов строки, начиная с опционально любым пробелом;

rtb.Text = Regex.Replace(rtb.Text, @"^\s*$(\n|\r|\r\n)", "", RegexOptions.Multiline); 

(как и другой текст & Заменить это нарушит любое форматирование должно ли быть)

+0

спасибо Alex, u save me;) – Bahaareh

+0

rtfBox.Rtf = Regex.Replace (rtfBox.Rtf, @ "\\ par (\ n | \ r | \ r \ n)", "", RegexOptions.Multiline); – Bahaareh

0

Из этого question:

Я не знаю, если есть простой способ сделать это за один шаг. Вы можете использовать функцию .split на свойстве .text богатого текстового поля, чтобы получить массив строк

строка [] строки = richTextBox1.Text.Split («\ п» .ToCharArray())

, а затем написать что-нибудь, чтобы повторно собрать массив в одну текстовую строку после удаления нужной строки и скопировать ее обратно в свойство .Text богатого текстового поля.

Вот простой пример:

  string[] lines = richTextBox1.Text.Split("\n".ToCharArray()); 


      int lineToDelete = 2;     //O-based line number 

      string richText = string.Empty; 

      for (int x = 0 ; x < lines.GetLength(0) ; x++) 
      { 
        if (x != lineToDelete) 
        { 
          richText += lines[ x ]; 
          richText += Environment.NewLine; 
        } 
      } 

      richTextBox1.Text = richText; 

Если форматированный текст ящик будет иметь более 10 строк или около того, было бы хорошей идеей использовать StringBuilder вместо строки, чтобы составить новый текст с.

0

Трудно сказать, что вы делаете, но похоже, что вы зацикливаетесь над линиями во внешнем foreach и смотрите на rtfBox.Lines, чтобы узнать, не является ли это ... Я не знаю ... эта часть странно. Затем вы меняете rtfBox.Text

Даже если ваша внутренняя логика правильная, это не сработает. Когда вы устанавливаете rtfBox.Text, вы меняете элемент, который вы зацикливаете. Затем вы продолжаете работу над копией оригинала, которая не имеет значения.

Я предлагаю вам не делать этого таким образом ... не беспокойтесь о коллекции Lines, просто исправьте текст, как хотите. Вот предложение (я не проверял)

rtfBox.Text = rtfBox.Text.Replace("\r\n\r\n","\r\n"); 
rtfBox.Text = refBox.Text.Replace("\n\n","\n"); 

или даже лучше

rtfBox.Text = refBox.Text.Replace(Environement.NewLine+Environement.NewLine,Environement.NewLine); 

Вы, возможно, придется поместить их в цикле, пока вы не найдете ни одного матча.

Например

string doubleNewLine = Environement.NewLine+Environement.NewLine; 
while (rtfBox.Text.Contains(doubleNewLine) 
{ 
    refBox.Text = refBox.Text.Replace(doubleNewLine,Environement.NewLine); 
} 
// deal with special case of text box starting with newline. 
0

Это удалит все строки из текста:

строка значение = Regex.Replace (SOMETEXT , @ "(\ n | \ r)", "", RegexOptions.Multiline);

Смежные вопросы