要使用系统剪贴板,就用到Clipboard这个类。一般而言,它只保存指定的格式的对象(在DataFormats里有枚举).

但是如果要保存自己定义的类对象呢?
没错,对象序列化是一种很好的方式。
代码如下:
            MyClass myObject = new MyClass();//MyClas是一个自定义的类
            MemoryStream stream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, myObject);
可是我找N久,都没有找到如何用Clipboard.SetData()方法或者Clipboard.SetDataObject()方法来放置这个序列化后内存流。
后来无意发现,Clipboard下有一个SetAudio()的静态方法,参数恰好是Stream类型的,可惜是保存音频格式的,再看看Get方法:Clipboard.GetAudioStream()返回也是一个Stream. 灵机一动,呵呵,我想,反正Clipboard只是暂存数据之用,肯定不会去检查这一个stream到底是不是音频格式的,何不就用它来“中介”自定义对象呢?
按这样的思路试了试,果然没有问题。
具体代码如下:
         /**//// <summary>
        /// 复制到系统剪贴板
        /// </summary>
        public void CopyToClipboard()
        {
            MyClass myObject = new MyClass();
            MemoryStream stream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(stream, myObject);
            Clipboard.SetData(DataFormats.Serializable, stream);
            Clipboard.SetAudio(stream);
        }
        /**//// <summary>
        /// 从系统剪贴板中获取数据
        /// </summary>
        public void GetFromClipboard()
        {
            MemoryStream stream = Clipboard.GetAudioStream() as MemoryStream;
            BinaryFormatter formatter = new BinaryFormatter();
            MyClass myObject = formatter.Deserialize(stream) as MyClass;
        }

转载于:https://www.cnblogs.com/vivid-stanley/archive/2007/02/09/645420.html

C# 利用系统剪贴板 保存 自定义对象相关推荐

  1. log4net进阶手札(四):保存自定义对象到oracle

    有些时候,log4net内置的日志信息不能满足实际需要,在log4net中可以保存自定义对象,主要是通过扩展内置的两个类:PatternLayout类和PatternLayoutConverter类, ...

  2. store 存取数据数组对象_ios – 如何在数组中保存自定义对象并将其存储在NSUserDefaults – iPhone中...

    要在用户默认值上存储和检索具有自定义对象的数组,您可以使用以下方法: -(void)writeArrayWithCustomObjToUserDefaults:(NSString *)keyName ...

  3. Flex 序列化自定义类 解决 sharedObject 保存自定义对象

    问题 我想把自定义类实例存储到LSO 解决办法 使用flash.net.registerClassAlias( )方法保留类型信息并把类实例添加到共享对象的data属性上. 讨论 LSOs 使用特殊的 ...

  4. JavaScript学习笔记:创建自定义对象

    文章目录 一.利用构造函数模式创建自定义对象 二.采用原型模式创建自定义对象 三.采用混合模式创建自定义对象 四.采用动态原型模式创建自定义对象 一.利用构造函数模式创建自定义对象 使用构造函数可以创 ...

  5. [置顶] 深入浅出Javascript(三)创建自定义对象以及属性、方法

    怎么样创建一个对象? 利用Object创建自定义对象 JavaScript能够自定义对象来扩展程序的功能,不仅如此,它还能扩展JavaScript提供的内置对象,新增内置对象的属性或方法 例如下面代码 ...

  6. js中自定义对象、json对象、json字符串、普通js对象 --js学习那本书上的

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  7. js中自定义对象、json对象、json字符串、普通js对象

    4.7 自定义对象 JS除了内置对象之外,还允许我们程序自己定义属于我们自己的对象,在JS中自定义对象的方式有2种:通过构造器创建对象,通过初始化器创建对象. 4.7.1 构造器创建对象(原生JS对象 ...

  8. commons-pool2自定义对象池-快速开始

    文章目录 一.什么是commons-pool2 1. springboot使用commons-pool2实现对象池 二.常用API 1. GenericObjectPool 2. PooledObje ...

  9. VIM与系统剪贴板的复制粘贴

    目录 前提 配置vim 参考 vim中的复制和粘贴命令分别是y和p,在不需要和系统交互剪贴板数据时还好,一旦要复制外部数据到vim中或者将vim中的数据复制到外部,这两个命令就无效了,只能用鼠标选中再 ...

最新文章

  1. SVN删除文件及其恢复问题详解
  2. 软件测试工具按用途分分为哪几类,以测试的形态分软件测试可以分为哪几类?...
  3. apache配置支持mysql_Apache Kylin | 建立 JDBC 数据源
  4. creator qt 设置换行方式_win下使用QT添加VTK插件实现点云可视化GUI
  5. Hive学习之路 (十六)Hive分析窗口函数(四) LAG、LEAD、FIRST_VALUE和LAST_VALUE
  6. SAP Spartacus B2B 页面 Disable 按钮的显示原理
  7. Linux Deepin 版本大全,Deepin下载-Deepin linuxv20.0 官方版下载-6188手游网
  8. LeetCode-Clone Graph-克隆无向图
  9. Ubuntu学习日记--Lesson10:gcc、make、makefile、cmake、cmakelists区别
  10. win7 C盘空间越来越小 Windows文件夹变大的问题
  11. 编译android源码 太慢,记编译Android源码的经历
  12. 制作Lightbox效果
  13. mysql blast2go,blast2go
  14. U盘中病毒后文件变为屏幕保护程序恢复方法
  15. 485集线器在安防监控系统的应用
  16. 使用MobaXterm tunneling访问集群(服务器)jupyter notebook
  17. 交换机的工作原理及配置
  18. Sqlserver取整
  19. java 接口,接口的特性,接口实现多态,面向接口编程
  20. String比较大小

热门文章

  1. Adaboost算法原理分析和实例+代码(转载)
  2. 【机器学习】数据挖掘算法——关联规则(一),相关概念,评价指标
  3. html中源文件回车效果无效,网页制作使用教程第2节初级.ppt
  4. c语言指定大小分割文件,C语言实现智能文件分割
  5. 二维非稳态导热微分方程_室内湿度影响验证:非真空型稳态法导热仪的正确使用方式...
  6. 特殊权限-软连接-硬链接
  7. Maven 插件打包java 后台
  8. 理解React-组件生命周期
  9. 对广晟有色的数据分析
  10. [TODO]Python拾遗(二)