将多个对象的复合材料复制到剪贴板(C#Winforms)



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);

最新更新