从RichTextBox复制文本及其格式

时间:2011-02-05 05:32:31

标签: .net vb.net winforms richtextbox clipboard

如何将RichTextBox中的文本及其格式复制到wordpad或webbrowser?

4 个答案:

答案 0 :(得分:9)

就像复制纯文本一样,您可以使用Clipboard.SetText method。这将清除Windows剪贴板的当前内容并将指定的文本添加到其中。

要复制带格式的文本,您需要使用接受overload of that method参数的TextDataFormat。这允许您指定要复制到剪贴板的文本的格式。在这种情况下,您可以指定TextDataFormat.Rtf或由富文本格式数据组成的文本。

当然,为了实现这一点,您还必须使用RichTextBox控件的Rtf property来提取RTF格式的文本。您不能使用常规Text property,因为它不包含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)


一旦文本在剪贴板上,您(或您的应用程序的用户)可以将其粘贴到您喜欢的任何位置。要以编程方式粘贴文本,您将使用同时接受TextDataFormat参数的Clipboard.GetText method。例如:

' 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

答案 1 :(得分:2)

我有类似的情况,我从我的VB .net应用程序复制并尝试过\ r \ n,\ r,\ n,vbCrLf,Chr(13),Chr(10),Chr(13)& Chr(10)等。如果我粘贴到Word或Wordpad中,则会显示新行,但不会粘贴到记事本中。最后我使用了ControlChars.NewLine,我一直在使用vbCrLf,它起作用了。所以,总结一下: Clipboard.SetText(“这是一行”& ControlChars.Newline&“这个坏男孩是第二个。”) 这是正常的。希望它适合你!

答案 2 :(得分:1)

我使用了这个简单的事件处理程序(使用richtextbox的内置复制/粘贴方法)来避免检查TextDataFormat:

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

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

答案 3 :(得分:0)

这是一个更好的解决方案(基于this answer):

P