Как добавить \ line в RTF с помощью элемента управления RichTextBox

При использовании элемента управления Microsoft RichTextBox можно добавлять новые строки, подобные этой ...

richtextbox.AppendText(System.Environment.NewLine); // appends \r\n

Однако, если вы теперь просматриваете сгенерированный rtf символы \ r \ n преобразуются в \ par not \ line

Как мне вставить управляющий код \ line в сгенерированный RTF?

Что не работает:

Замена токена

Хаки например, вставив токен в конец строки, а затем заменив его постфактум, примерно так:

string text = "my text";
text = text.Replace("||" "|"); // replace any '|' chars with a double '||' so they aren't confused in the output.
text = text.Replace("\r\n", "_|0|_"); // replace \r\n with a placeholder of |0|

richtextbox.AppendText(text);

string rtf = richtextbox.Rtf;
rtf.Replace("_|0|_", "\\line"); // replace placeholder with \line
rtf.Replace("||", "|"); // set back any || chars to |

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

Отправка ключевых сообщений

public void AppendNewLine()
{
    Keys[] keys = new Keys[] {Keys.Shift, Keys.Return};
    SendKeys(keys);
}

private void SendKeys(Keys[] keys)
{
    foreach(Keys key in keys)
    {
        SendKeyDown(key);
    }
}

private void SendKeyDown(Keys key)
{
    user32.SendMessage(this.Handle, Messages.WM_KEYDOWN, (int)key, 0);
}

private void SendKeyUp(Keys key)
{
    user32.SendMessage(this.Handle, Messages.WM_KEYUP, (int)key, 0);
}

Это также заканчивается преобразованием в \ par

Есть ли способ отправить сообщение прямо в элемент управления msftedit, чтобы вставить управляющий символ?

Я в полном тупике, есть идеи, ребята? Спасибо за помощь!

17
задан abatishchev 6 January 2011 в 14:49
поделиться