This is a 2 parter。C#剪切/复制和粘贴对象
首先我有一段时间让复制和粘贴操作的粘贴部分工作。
我有一个方法,将信息复制到剪贴板,完美的作品。
private void CopyData(string format, object data, string text)
{
bool addedData = false;
DataObject copyData = new DataObject();
if (!string.IsNullOrEmpty(text))
{
copyData.SetData(DataFormats.Text, text);
addedData = true;
}
if (!string.IsNullOrEmpty(format) && data != null)
{
copyData.SetData(format, false, data);
addedData = true;
//this is only for testing
object obj = null;
if (copyData.GetDataPresent(format))
obj = (object)copyData.GetData(format);
}
if (addedData)
Clipboard.SetDataObject(copyData, true);
}
当我检查数据添加对象(OBJ)不为空。
但是,当我然后使用相同的格式键从不同的方法粘贴数据时,我每次都会得到空值。
private void PasteFromClipboard()
{
object obj = null;
IDataObject paste = null;
if (Clipboard.GetDataObject().GetDataPresent("mydatatype"))
obj = (object)Clipboard.GetDataObject().GetData("mydatatype");
else
return;
if (obj == null)
throw new NullReferenceException("Could not gather information from the
}
我试过了所有我能想到的东西,它只是没有意义。我创建了一个字符串数组来捕获DataObject所持有的所有格式键,而“mydatatype”是第一个。我曾尝试使用(Clipboard.GetDataObject().GetData("mydatatype") as object)
进行铸造,而不是使用铸造,但我无法弄清楚。我知道那里有数据,因为我可以去记事本并粘贴与对象一起复制的文本。
任何想法,为什么我可以在一种方法中获得数据,但不是另一种?
其次我想知道如何去削减我的两个窗口之间的粘贴操作。我正在考虑类似Excel的东西,如果只粘贴文本,数据将保留,但是如果粘贴对象,则源文件将被删除。
谢谢 Patrick。
我测试拔测出来时,我得到的数据对象数据类型的数组和它拉出数据的文本版本。 “mydatatype”格式被传递到Copy方法的“格式”局部变量,但是我会尝试对字符串进行硬编码,看看是否有任何区别。 目前我只创建了自己的类来实现“mydatatype”的切割和应对,因为它只会在应用程序中执行,这意味着没有其他应用程序会使用该数据。 – Patrick 2010-01-20 14:22:55
好硬编码的格式没有改变,我也加入了数据,而不是“对象”类型,也没有任何区别。噢,谢谢你的想法。 我会暂时坚持我的自定义班级解决方案。 – Patrick 2010-01-20 14:58:40