2011-02-05 110 views

回答

9

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

要复制带格式的文本,您需要使用接受TextDataFormat参数的overload of that method。这允许您指定要复制到剪贴板的文本的格式。在这种情况下,您将指定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 
+0

它也会复制RichTextBox中的图像,我该如何将它转换为html? – 2011-02-05 07:03:28

2

我也有类似的情况,我从我的VB .NET应用程序复制和曾试图\ r \ n,\ r,\ n,vbCrLf,CHR(13)CHR(10) ,Chr(13)& Chr(10)等等。如果我粘贴到Word或写字板中,但不粘贴到记事本中,则会出现新行。最后,我使用了ControlChars.NewLine,我一直使用vbCrLf,并且它工作正常。所以,总结一下: Clipboard.SetText(“这是一行”& ControlChars.Newline &“这个坏男孩是第二个。”) 而且这个工作正常。希望对你有帮助!

0

这是一个更好的解决方案(基于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

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

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

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