2011-02-05 49 views

risposta

9

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 del RichTextBox. 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 
+0

Copierà anche le immagini nel RichTextBox e come posso convertirlo in html? –

+0

@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'. –

+0

@cody Grazie, proverò a farlo e riferirò –

2

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!

0

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

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(); 
}