我尝试使用Clipboard类粘贴一些复制的对象。
<Serializable()> Public Class DogsZoo
Public Property Dogs As List(Of Dog)
Public Property Workers As List(Of Worker)
Public Sub New(dogs As List(Of Dog), workers As List(Of Worker))
Me.Dogs = dogs
Me.Workers = workers
End Sub
End Class
Dim myDogsZoo = myCity.GetDogsZoo()
Clipboard.SetData("dogs", myDogsZoo)
' bla bla , some actions '
If Not Clipboard.ContainsData("dogs") Then Throw New Exception("Clipboard")
' here I obtain Nothing !?'
Dim clipboardObject = Clipboard.GetData("dogs")验证Clipboard.ContainsData(myFormat)成功通过,但是当我尝试获取数据时,我获得了null (Nothing)。这是一个正确的行为吗?
PS。
C#或VB.NET答案都可以。
PPS。
我应该认识到,当数据类型是简单的(泛型列表)时,我使用上面的方法没有任何剪贴板的问题。现在,我将保存在内存中的对象更改为自定义对象...从那时起..。这个问题。
发布于 2011-12-16 04:16:23
如果您使用的是自定义对象,我相信该对象必须支持序列化。
当我研究从剪贴板上读取图像和文本时,我发现下面的文章很有帮助:http://msdn.microsoft.com/en-us/library/637ys738.aspx
有一节是关于以自定义格式将数据写入剪贴板的。我注意到您使用VB.net编写代码,因此我复制了VB.net摘录,如下所示:
使用自定义格式名称和业务对象“演示了SetData、ContainsData和GetData”。公共ReadOnly属性TestCustomFormat() As Customer Get Clipboard.SetData("CustomerFormat",新客户(“Customer Name"))
如果Clipboard.ContainsData("CustomerFormat"),则返回CType(Clipboard.GetData("CustomerFormat"),Customer) End如果返回Nothing End Get End属性
..。
公共类客户
私有nameValue As字符串= String.Empty公共子新建(ByVal名称作为字符串) nameValue =名称终结子公共属性名称() As字符串Get返回nameValue End Get Set (字符串形式的ByVal值) nameValue = value End Set End属性
结束类
希望这能有所帮助?
温馨的问候,韦恩
发布于 2011-12-17 03:57:09
注意"Dog“和"Worker”类都是可序列化的……
要复制的对象需要是可序列化的,这意味着至少它的所有公共成员都需要是可序列化的。
如果不是,剪贴板操作将以静默方式失败。
此外,访问剪贴板的线程应该具有STA属性...
发布于 2014-05-19 12:23:26
我知道这是一个非常古老的帖子,但由于它没有解决方案,我想我会提供一个解决方案(我最初的研究引导我来到这里,但我在其他地方偶然发现了问题的原因)。
为了停止我的对象出现这个线程中描述的相同问题,我必须确保它包含一个带有两个参数的构造函数,如下所示。一旦实现,粘贴就能完美地工作。
Private Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
With info
Me.Key = .GetString("Key")
Me.Description = .GetString("Description")
' etc.
End With
End Sub显然,With - End With块中的代码将特定于您自己的自定义对象的属性。
https://stackoverflow.com/questions/8525139
复制相似问题