0

我正在尝试使用Clipboard将所选对象存储在我编写的程序中,用于复制和粘贴(显然)。我的复制代码是:

DataObject oWrapper;

Clipboard.Clear();
oWrapper = new DataObject();
oWrapper.SetData(typeof(FormDesignerControls), this.SelectedControls.Clone());
Clipboard.SetDataObject(oWrapper, false);

到目前为止,我的粘贴代码是:

DataObject oWrapper;

oWrapper = (DataObject)Clipboard.GetDataObject();
if (oWrapper.GetDataPresent(typeof(FormDesignerControls)))
{
    oFDCs = (FormDesignerControls)oWrapper.GetData(typeof(FormDesignerControls));
}

FormDesignerControls是一个包含复制对象的集合类。

复制代码似乎工作正常。当粘贴代码运行时,调用以if 条件oWrapper.GetDataPresent返回true。但是,调用oWrapper.GetData返回null

我在这里错过了一个技巧吗?

4

1 回答 1

0

您应该注册您的数据类型:

    private static readonly DataFormats.Format myDataClipboardFormat =
        DataFormats.GetFormat("myData");

复制:

    MyDataType data = <your object>
    DataObject dataObject = new DataObject(myDataClipboardFormat.Name, data);
    Clipboard.SetDataObject(dataObject);

粘贴:

    if (!Clipboard.ContainsData(myDataClipboardFormat.Name))
        return;
    IDataObject dataObject = Clipboard.GetDataObject();
    if (dataObject == null)
        return;
    MyDataTypedata = 
       (MyDataType)dataObject.GetData(myDataClipboardFormat.Name);
于 2021-06-28T19:20:07.400 回答