Копирование текста вместе с его форматированием из RichTextBox

Как скопировать текст в RichTextBox вместе с его форматированием на wordpad или webbrowser?

4 ответов


как копировать текст, вы должны использовать Clipboard.SetText метод. Это очищает текущее содержимое буфера обмена в Windows и добавляет указанный текст.

скопировать форматированный текст, вам нужно использовать перегрузка этого метода принимает TextDataFormat


У меня была аналогичная ситуация, когда я копировал из своего приложения VB .net и пробовал \r\n, \r, \n, vbCrLf, Chr(13), Chr(10), Chr(13) & Chr(10) и т. д. Новые строки появятся, если я вставлю их в Word или Wordpad, но не в блокнот. Наконец, я использовал ControlChars.NewLine, где я использовал vbCrLf, и это сработало. Итак, подведем итоги: Буфер.SetText ("это одна строка" и ControlChars.Newline & "и этот плохой мальчик-второй.") И это работает правильно. Надеюсь, это сработает ты!


я использовал эти простые обработчики событий (которые используют встроенные методы копирования/ вставки richtextbox), чтобы избежать проверки TextDataFormat:

private void mnuCopy_Click(object sender, EventArgs e)
{
    txtRichtext.Copy();
}

private void mnuPaste_Click(object sender, EventArgs e)
{
    txtRichtext.Paste();
}

Это лучшее решение (на основе ответ):

var dto = new DataObject();
dto.SetText(richTextBox.SelectedRtf, TextDataFormat.Rtf);
//Since notepad sux and doesn't understand \n, 
//we need to fix it replacing by Environment.NewLine (\r\n)
string unformattedText = richTextBox.SelectedText.Replace("\n", Environment.NewLine);
dto.SetText(unformattedText, TextDataFormat.UnicodeText);
Clipboard.Clear();
Clipboard.SetDataObject(dto);