当我从我的应用程序中复制数据时,我编写了一个简单的C#脚本来检查它的类型。显然(我希望如此),它是一个字符串数组:
IDataObject data = Clipboard.GetDataObject();
Console.WriteLine(data.GetFormats(true)); // writes "System.String[]"
现在我提取数据
object o = data.GetData( "System.String[]" );
结果对象保持为空。
为什么呢?我如何提取数据?
答案 0 :(得分:3)
您不应将CLR类型作为参数。 GetData的参数只是一个可以是任何东西的标识符,但是有许多程序使用的pre-defined formats。
您可能想要做的是使用DataFormats.Text以文本形式(即字符串)检索数据。请注意,这仅在剪贴板内容的来源实际提供此格式的数据时才有效,但大多数情况下都应该是安全的。
而且,由于文本是一种常见的格式,因此甚至还有一种方便的方法来检索名为Clipboard.GetText()的格式
编辑:调用GetFormats时返回的字符串[]只是一个列出所有可用格式的字符串数组。它不是实际的剪贴板数据,只是告诉您在执行obj.GetData()
时可以使用哪种格式。在调试器中查看该数组或在foreach中打印它以查看是否有任何类似于数组的格式。
答案 1 :(得分:2)
data.GetFormats(true)
返回存储在剪贴板中的数据格式的名称以及剪贴板中这些格式可以转换为的所有数据格式。要获取数据,您需要调用您想要的data.GetData(dataFormatName)
数据格式。如果你想获得所有对象,你应该这样做:
foreach (var item in data.GetFormats(true))
{
object o = data.GetData(item);
// do something with o
}