首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clipboard.ContainsData和Clipboard.GetData

Clipboard.ContainsData和Clipboard.GetData
EN

Stack Overflow用户
提问于 2011-12-16 02:54:15
回答 3查看 2.6K关注 0票数 2

我尝试使用Clipboard类粘贴一些复制的对象。

代码语言:javascript
复制
  <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。

我应该认识到,当数据类型是简单的(泛型列表)时,我使用上面的方法没有任何剪贴板的问题。现在,我将保存在内存中的对象更改为自定义对象...从那时起..。这个问题。

EN

回答 3

Stack Overflow用户

发布于 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属性

结束类

希望这能有所帮助?

温馨的问候,韦恩

票数 0
EN

Stack Overflow用户

发布于 2011-12-17 03:57:09

注意"Dog“和"Worker”类都是可序列化的……

要复制的对象需要是可序列化的,这意味着至少它的所有公共成员都需要是可序列化的。

如果不是,剪贴板操作将以静默方式失败。

此外,访问剪贴板的线程应该具有STA属性...

票数 0
EN

Stack Overflow用户

发布于 2014-05-19 12:23:26

我知道这是一个非常古老的帖子,但由于它没有解决方案,我想我会提供一个解决方案(我最初的研究引导我来到这里,但我在其他地方偶然发现了问题的原因)。

为了停止我的对象出现这个线程中描述的相同问题,我必须确保它包含一个带有两个参数的构造函数,如下所示。一旦实现,粘贴就能完美地工作。

代码语言:javascript
复制
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块中的代码将特定于您自己的自定义对象的属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8525139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档