为什么System.Windows.Forms.Clipboard.GetData / SetData不起作用?

时间:2009-09-27 21:41:17

标签: .net clipboard

我正在尝试将复制/粘贴添加到编辑项目的应用程序中。拥有一组选定项目的数据副本,应该能够复制它们或将它们传输到程序的另一个实例。我试过这个:

const string MyClipboardFormat = "MyClipboardFormat"

private void copyToolStripMenuItem_Click(object sender, EventArgs e)
{
  XmlDocument xdoc;
  //add data of selected items
  Clipboard.SetData(MyClipboardFormat,xdoc);
}

private void pasteToolStripMenuItem_Click(object sender, EventArgs e)
{
  XmlDocument xdoc = Clipboard.GetData(MyClipboardFormat) as XmlDocument;
  if (xdoc == null)
    throw new Exception("Clipboard does not contain MyClipboardFormat");
  //read item data from xdoc
}

我已经使用Google搜索,但只发现了使用GetDataObject / SetDataObject的相关内容,相当于看起来正在发生的事情,如果我使用反射器来查看GetData / SetData的作用。

我应该在某处注册剪贴板格式字符串吗?

2 个答案:

答案 0 :(得分:2)

我遇到了类似的问题,为了让它工作,我必须在将对象放入剪贴板之前对其进行序列化,并在调用Clipboard.GetData()之后对其进行反序列化。

答案 1 :(得分:1)

您需要注册您的格式。使用DataFormats.GeTFormat(MyClipboardFormat)

  

使用您自己的格式调用此方法   用于创建新剪贴板格式的名称   类型。如果指定的格式没有   存在,这种方法会注册   将其命名为剪贴板格式   Windows注册表并获得一个独特的   格式标识符。