Копирование текста вместе с его форматированием из RichTextBox - PullRequest
7 голосов
/ 05 февраля 2011

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

Ответы [ 4 ]

10 голосов
/ 05 февраля 2011

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

Для копирования отформатированного текста необходимо использовать перегрузку этого метода , который принимает TextDataFormat параметр.Это позволяет вам указать формат текста, который вы хотите скопировать в буфер обмена.В этом случае вы должны указать TextDataFormat.Rtf или текст, состоящий из данных в формате расширенного текста.

Конечно, чтобы это работало, вам также нужно будет использовать свойство Rtf элемента управления RichTextBox для извлечения его текста с форматированием RTF.Нельзя использовать обычное Text свойство , поскольку оно не включает информацию о форматировании RTF.Как следует из документации:

Свойство Text не возвращает никакой информации о форматировании, примененном к содержимому RichTextBox.Чтобы получить коды форматированного текста (RTF), используйте свойство Rtf.


Пример кода:

' Get the text from your rich text box
Dim textContents As String = myRichTextBox.Rtf

' Copy the text to the clipboard
Clipboard.SetText(textContents, TextDataFormat.Rtf)


И после того, как текств буфере обмена вы (или пользователь вашего приложения) можете вставить его куда угодно.Чтобы вставить текст программно, вы будете использовать метод Clipboard.GetText , который также принимает параметр TextDataFormat.Например:

' Verify that the clipboard contains text
If (Clipboard.ContainsText(TextDataFormat.Rtf)) Then
    ' Paste the text contained on the clipboard into a DIFFERENT RichTextBox
    myOtherRichTextBox.Rtf = Clipboard.GetText(TextDataFormat.Rtf)
End If
2 голосов
/ 19 февраля 2013

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

1 голос
/ 10 декабря 2015

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

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

private void mnuPaste_Click(object sender, EventArgs e)
{
    txtRichtext.Paste();
}
0 голосов
/ 20 августа 2015

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

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);
...