C# Winforms 应用程序,Windows 10。
表单有一个richtextbox 和一个图表(都是MS)。目前具有将richtextbox复制到剪贴板的功能:
Clipboard.SetText(rtbContents.Rtf, TextDataFormat.Rtf);
以及将图表作为图像复制到剪贴板的功能:
using (MemoryStream ms = new MemoryStream())
{
chart1.SaveImage(ms, ChartImageFormat.Bmp);
Bitmap bm = new Bitmap(ms);
Clipboard.SetImage(bm);
}
需要一个函数将两者作为一个单元进行复制(富文本在上面,图像在下面),以便 ctrl-v 将它们都粘贴到例如 Word 文档中。
尝试过 IDataObject,无法在对象中存储富文本而不会丢失颜色、字体大小、特殊字符。看起来 IDataObject 仍然只能一次粘贴一个东西,只是感知目标应用程序最可能想要的东西。
尝试使用 DrawString 组合 bmp,在富文本中保留多种颜色以及组装或连接位图时遇到了麻烦。
尝试了 CopyFromScreen,使用多个监视器定位问题并确定实际位置(this.Location.X 相对于容器,而不是屏幕),并且不完全符合规范,因为如果richtextbox 是隐藏或浮动的,则不会在顶部显示它。更不用说如果你尝试调试它,它会复制一大块 Visual Studio 的显示。
开源第三方解决方案可能没问题,寻找了一些但没有看到任何可以执行此功能的东西。Win32 API 调用将是最后的手段。
提前感谢您的任何帮助。