Come copiare il testo in un RichTextBox insieme alla sua formattazione in un wordpad o browser?Copia del testo insieme alla sua formattazione da un RichTextBox
risposta
Proprio come quando si copia testo normale, si utilizza lo Clipboard.SetText
method. Questo cancella il contenuto corrente degli appunti di Windows e aggiunge il testo specificato.
Per copiare il testo formattato, è necessario utilizzare lo overload of that method che accetta un parametro TextDataFormat
. Ciò consente di specificare il formato del testo che si desidera copiare negli Appunti. In questo caso, specificare TextDataFormat.Rtf
o testo costituito da dati in formato RTF.
Ovviamente, per far funzionare tutto questo, è necessario utilizzare anche il Rtf
property del controllo RichTextBox
per estrarre il testo con la formattazione RTF. Non è possibile utilizzare il normale Text
property perché non include le informazioni di formattazione RTF. Come la documentazione avverte:
Il
Text
proprietà non restituisce alcuna informazione circa la formattazione applicata ai contenuti delRichTextBox
. Per ottenere i codici RTF (rich text formatting), utilizzare la proprietàRtf
.
codice di esempio:
' 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)
E una volta che il testo è negli appunti, voi (o l'utente dell'applicazione) potete incollarlo dove si vuole. Per incollare il testo a livello di codice, verrà utilizzato lo Clipboard.GetText
method che accetta anche un parametro TextDataFormat
. Per esempio:
' 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
ho avuto una situazione simile in cui stavo copiando dalla mia applicazione VB .NET e avevo provato \ r \ n \ r \ n, vbCrLf, Chr (13), Chr (10) , Chr (13) & Chr (10), ecc. Le nuove linee apparirebbero se avessi incollato in Word o Wordpad, ma non in Blocco note. Finalmente ho usato ControlChars.NewLine dove stavo usando vbCrLf, e ha funzionato. Quindi, per riassumere: Clipboard.SetText ("Questa è una riga" & ControlChars.Newline & "e questo cattivo ragazzo è il secondo.") E che funziona correttamente. Spero che funzioni per te!
Si tratta di una soluzione migliore (sulla base di this answer):
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);
Ho usato questo semplici gestori di eventi (che utilizzano i metodi built-in copia/incolla del RichTextBox) per evitare il controllo per TextDataFormat:
private void mnuCopy_Click(object sender, EventArgs e)
{
txtRichtext.Copy();
}
private void mnuPaste_Click(object sender, EventArgs e)
{
txtRichtext.Paste();
}
Copierà anche le immagini nel RichTextBox e come posso convertirlo in html? –
@abcd: non so se copierà le immagini o meno. Sospetto che non accadrà, ma dovrai provarlo e vedere. Sei impostato con un ambiente molto più propizio a testare questo momento al momento di quanto lo sia io. Se si desidera utilizzare il formato HTML, modificare 'TextDataFormat.Rtf' in' TextDataFormat.Html'. –
@cody Grazie, proverò a farlo e riferirò –