0

我使用以下代码更改了使用剪贴板动态从 RTB 复制的文本的一些格式

 public static void CustomCopy(RichTextBox rtb)
      {
          rtb.Copy();
          var _inMemoryRtb=new RichTextBox();
          var iData = Clipboard.GetDataObject();
          if (iData.GetDataPresent(DataFormats.Rtf))
          {
              _inMemoryRtb.Rtf = (string)Clipboard.GetData(DataFormats.Rtf);

                  _inMemoryRtb.SelectAll();
                 _inMemoryRtb.SelectionBackColor = Color.Red;
                 Clipboard.SetData(DataFormats.Rtf, _inMemoryRtb.Rtf);


          }

          _inMemoryRtb.Clear();
      }

当我将复制的文本粘贴到 Word/写字板时,它可以工作,但如果我粘贴到浏览器/记事本,则没有任何反应。问题出在哪里?

4

1 回答 1

1

如果不依赖“支持 RTF 的环境”,例如 Word,您将无法获得想要的东西。DataFormats.Rtf避免任何不支持 RTF的Clipboard.SetData程序无法处理这些数据。

ARichTextBox和其中的文本很容易被误解为文本+其他内容,但它是一种完全不同的格式。一个快速的实验来更好地理解这一点:在你的代码中替换 Clipboard.SetData(DataFormats.Rtf, _inMemoryRtb.Rtf);Clipboard.SetData(DataFormats.Text, _inMemoryRtb.Rtf);. 你现在看到的是未编码版本的 RTF 内容,任何程序都能看到的。请记住,他无法理解的文本可以很容易地转换回 RTF:

Clipboard.SetData(DataFormats.Text, _inMemoryRtb.Rtf);
var iData2 = Clipboard.GetDataObject();
rtb.Rtf = (string)Clipboard.GetData(DataFormats.Text);

更新

使用您的代码,您正在粘贴 RTF 信息(不能由不支持 RTF 的程序处理,如记事本)。如果您只想将文本粘贴到 中rtb,请依赖SetText:您将存储在ClipBoard要粘贴的文本中(独立于给定格式),并且任何程序都可以“理解”此信息。

Clipboard.SetText(rtb.Text, TextDataFormat.Text);

澄清

原始OP的代码是复制RTF信息,不支持RTP的程序无法理解。此代码在正确的条件下工作(源程序和目标程序支持 RTF)。以前的更新是指只复制文本而不管格式。因此,如果您想要的是尽可能复制 RTF 格式的文本(RichTextBox 到 RichTextBox),否则只复制文本(RichTextBox 到记事本),您应该将两个代码一起编写(原始 OP 和前面提到的SetText)。

于 2013-10-06T10:06:23.980 回答