【问题标题】:How to retrieve data from clipboard as System.String[]如何从剪贴板检索数据作为 System.String[]
【发布时间】:2010-10-01 14:25:34
【问题描述】:

当我从我的应用程序复制数据时,我编写了一个简单的 C# 脚本来检查它是什么类型。显然(我也预料到了),它是一个字符串数组:

       IDataObject data = Clipboard.GetDataObject();
       Console.WriteLine(data.GetFormats(true)); // writes "System.String[]"

现在当我像这样提取数据时

      object o = data.GetData( "System.String[]" );

生成的对象保持为空。

为什么?如何提取数据?

【问题讨论】:

  • 应该可以在我的机器上工作。发布一个 sn-p,显示您如何将其放在剪贴板上。

标签: c# windows clipboard


【解决方案1】:

您不应该将 CLR 类型作为参数。 GetData 的参数只是一个标识符,可以是任何东西,但有一些pre-defined formats 是许多程序使用的。

您可能想要做的是使用DataFormats.Text 以文本形式(即字符串)检索数据。请注意,这仅在剪贴板内容的来源实际以这种格式提供数据时才有效,但大多数情况下您应该是安全的。

而且,由于文本是一种常见的格式,甚至还有一种方便的方法可以以这种格式检索它,称为Clipboard.GetText()

编辑:调用 GetFormats 时返回的 string[] 只是列出所有可用格式的字符串数组。这不是实际的剪贴板数据,它只是告诉您在执行obj.GetData() 时可以使用哪种格式。在调试器中查看该数组或在 foreach 中打印它以查看是否有类似数组的格式。

【讨论】:

  • 我知道数据是从一系列网格单元格中复制而来的。这就是为什么我坚信String[] 格式。我正在调查为什么复制这些特定单元格不起作用,而其他单元格则起作用。
【解决方案2】:

data.GetFormats(true) by MSDN 返回存储在剪贴板中的数据格式的名称以及剪贴板中这些格式可以转换为的所有数据格式。要获取数据,您需要调用您想要获取的数据格式的data.GetData(dataFormatName)。如果你想得到所有的对象,你应该这样做:

foreach (var item in data.GetFormats(true))
{
   object o = data.GetData(item);
   // do something with o
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 2016-06-06
    相关资源
    最近更新 更多