您可以为IDataObject创建一个包装类,从Windows剪贴板中获取该类以添加数据。其思想是包装器将知道您的自定义格式,并委托给所有其他格式的原始包装的IDataObject。
下面的部分实现显示了构造函数和一个IDataObject方法实现:
public class MyDataObject : IDataObject
{
public MyDataObject(IDataObject inner, string format, Type type, object data)
{
m_inner = inner;
m_format = format;
m_type = type;
m_data = data;
}
private IDataObject m_inner;
private string m_format;
private Type m_type;
private object m_data;
object IDataObject.GetData(string format)
{
// if my format, return the wrapper data
if (format == m_format)
return object;
// otherwise, delegate to the wrapped data object which holds
// the other formats
return m_inner.GetData(format);
}
// implement the rest of IDataObject similarly
...
}
一个警告:检索系统剪贴板IDataObject时,必须检查它是否是包装器对象之一。在这种情况下,你不想继续包装你的包装纸。相反,您需要修改现有包装器的数据/格式字段,或者为原始剪贴板数据对象创建一个新包装器。