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仍然只能一次粘贴一件事,只是感觉到目标应用程序最可能想要的东西。
尝试使用拉链结合BMP,在富文本中保存多种颜色以及组装或串联位图的麻烦。
尝试了复印Fromscreen,使用多个监视器的位置麻烦并确定实际位置(this.location.x相对于容器而不是屏幕(,并且不完全满足规格,因为如果RichTextbox是隐藏的或浮动的,则不会显示它在顶部。更不用说,如果您尝试调试它,它将复制一大堆Visual Studio的显示。
开源第三方解决方案可能还可以,寻找一些东西,但没有看到任何可以执行此功能的东西。Win32 API电话将是最后的度假胜地。
事先感谢您的任何帮助。
解决方案是将剪贴板用作中间步骤。hacky但有效。
using (MemoryStream ms = new MemoryStream())
{
chart1.SaveImage(ms, ChartImageFormat.Bmp);
Bitmap bm = new Bitmap(ms);
Clipboard.SetImage(bm);
}
RichTextBox rtbCombination = new RichTextBox();
rtbCombination.Rtf = ucLegend.rtbContents.Rtf;
rtbCombination.Select(rtbCombination.Rtf.Length, 0);
rtbCombination.AppendText(Environment.NewLine);
rtbCombination.Select(rtbCombination.Rtf.Length, 0);
rtbCombination.Paste();
Clipboard.SetText(rtbCombination.Rtf, TextDataFormat.Rtf);