【发布时间】:2014-07-03 16:03:47
【问题描述】:
[STAThread]
static void Main(string[] args)
{
Clipboard.SetDataObject(Clipboard.GetDataObject(), true);
}
这只是我能想象到的使用DataObject 剪贴板方法的最简单的测试,但是如果从记事本复制一些文本然后运行此应用程序,我将无法在应用程序退出后再粘贴该文本。没有抛出异常。使用名为 ClipView 的应用程序,我可以看到剪贴板中的文本已消失。
我使用的命名空间来自 System.Windows.Forms。如您所见,这是一个控制台应用程序而不是 Windows 窗体应用程序,因此这可能是问题的根源。但如果是这样,我想了解原因。
编辑
为了清楚起见,这只是一个测试,我使用剪贴板的实际目标更复杂。我意识到如果我只关心文本,我可以使用专门针对文本的方法。
编辑 2
虽然方法文档有很多不足之处,但this Code Project article 和this MSDN article 似乎都表明使用DataObject 调用Clipboard.SetDataObject 应该可以按预期工作,添加该数据对象中的所有数据并使用格式正确。
【问题讨论】:
-
尽管名称不同,但 GetDataObject 和 SetDataObject 可能不是对称函数。 GetDataObject 返回一个
IDataObject,可用于检索实际有效负载,而 SetDataObject 需要一些可序列化的有效负载。 (这是我从文档中收集到的。) -
@Heinzi 是的,有点不清楚。不过,通过本文的最后一部分,我认为
SetDataObject应该能够正确处理IDataObject:codeproject.com/Articles/2207/Clipboard-handling-with-NET -
你必须这样做 Clipboard.SetDataObject(Clipboard.GetDataObject().GetData(DataFormats.Text), true); ..你将 idataobject 本身设置为数据而不是它包含的数据。
-
@terrybozzio 如果我在剪贴板上同时有多种不同的数据类型,如我之前评论中的链接所示,该怎么办?
-
那么请参考这个链接 - msdn.microsoft.com/en-us/library/637ys738(v=vs.110).aspx - 在以多种格式将数据添加到剪贴板部分中。