соединить линии - PullRequest
       34

соединить линии

0 голосов
/ 28 октября 2009

в форме окна, у меня есть RichTextBox, с некоторым текстом, в несколько строк. и одна кнопка на форме.

Мне нравится, когда я нажимаю на эту кнопку, чтобы объединить все richtextbox строк в одну строку, но не потерять стиль текста (например, семейство шрифтов, цвет и т.

Я не могу сделать это с помощью Replace, как \ r \ n, а не с помощью Replace (Environment.NewLine, "") ........ : - ((

Я также пытался заменить \ par и \ pard, но все равно не повезло .......

пожалуйста, помогите !!!


richTextBox1.Text = richTextBox1.Text.Replace(Environment.NewLine, "");

с этим не все в порядке, потому что с такими свободными определениями шрифтов (цвет, полужирный, лишний текст и т. Д.).

Хорошо, еще раз, чтобы быть более конкретным ...

У меня есть элемент управления RichTextBox с 4 строками текста:

line 1
line 2
line 3
line 4

строка 3 окрашена в красный цвет.

Мне нужно получить следующее:

line 1 line 2 line 3 line 4

(и эта "строка 3" будет красной, как это было раньше).

когда я пытаюсь с

richTextBox1.Text = richTextBox1.Text.Replace (Environment.NewLine, "");

... я получаю:

line 1
line 2   
line 34

«строка 2» окрашена в красный цвет.

что мне нужно сделать, чтобы решить эту проблему?

Ответы [ 4 ]

2 голосов
/ 28 октября 2009

Это будет работать:

        // Create a temporary buffer - using a RichTextBox instead
        // of a string will keep the RTF formatted correctly
        using (RichTextBox buffer = new RichTextBox())
        {
            // Split the text into lines
            string[] lines = this.richTextBox1.Lines;
            int start = 0;

            // Iterate the lines
            foreach (string line in lines)
            {
                // Ignore empty lines
                if (line != String.Empty)
                {
                    // Find the start position of the current line
                    start = this.richTextBox1.Find(line, start, RichTextBoxFinds.None);

                    // Select the line (not including new line, paragraph etc)
                    this.richTextBox1.Select(start, line.Length);

                    // Append the selected RTF to the buffer
                    buffer.SelectedRtf = this.richTextBox1.SelectedRtf;

                    // Move the cursor to the end of the buffers text for the next append
                    buffer.Select(buffer.TextLength, 0);
                }
            }

            // Set the rtf of the original control
            this.richTextBox1.Rtf = buffer.Rtf;
        }
0 голосов
/ 28 октября 2009

Бьюсь об заклад, вы просто звоните Заменить в текстовой строке, что вам нужно сделать, что-то вроде этого:

richTextBox1.Text = richTextBox1.Text.Replace(Environment.NewLine, "");

Ключевым моментом здесь является то, что вам нужно присвоить результат функции тексту расширенного текстового поля, иначе ничего не произойдет. Видите, строки неизменны , и когда вы выполняете операцию над ней, вы должны назначить результат операции чему-либо (даже оригинальная переменная будет работать), иначе ничего не произойдет.

0 голосов
/ 28 октября 2009

Я думаю, что это поможет вам:

StringBuilder strbld = new StringBuilder();

for (int i = 0; i < this.richTextBox1.Text.Length; i++)
{
   char c = this.richTextBox1.Text[i];

   if (c.ToString() != "\n")
      strbld.Append(c);
}

MessageBox.Show(strbld.ToString());

хорошо, ChrisF прав. Как насчет этого:

string strRtf = richTextBox1.Rtf.Replace("\\par\r\n", " ");
strRtf = strRtf.Replace("\\line", " ");
richTextBox2.Rtf = strRtf;

: - |

0 голосов
/ 28 октября 2009

Элемент управления TextBox имеет свои собственные методы для поиска и замены текста. Взгляните на эту статью (это VB.NET, но я надеюсь, что вы поймете идею): http://www.codeproject.com/KB/vb/findandriplace_rtb.aspx

...