代码之家  ›  专栏  ›  技术社区  ›  Oliver Salzburg

如何在剪贴板中存储对象集合?

  •  2
  • Oliver Salzburg  · 技术社区  · 15 年前

    我有一节课 Slide ,其中我想在剪贴板中放置几个实例。对于单个实例来说,它工作得非常好。
    但是当我试图,例如,把 List<Slide> 在剪贴板中, SetDataObject 呼叫将自动失败。
    在内部,一个ComException将被抛出并被吞没。这是因为 List 不实现 ISerializeable .
    所以, List<T> 似乎不是一个选择。将一个集合 玻片 剪贴板中的实例?

    2 回复  |  直到 11 年前
        1
  •  1
  •   MCain    15 年前

    arraylist是可序列化的。当你失去了有力的打字时,你总是可以在出去的路上投。

        2
  •  1
  •   Oliver Salzburg    11 年前

    结果发现我的假设是错误的。我只是忘了一个 ToList() 打电话过来,只是路过 IEnumerable SetData . 在添加之后,它就可以放入剪贴板了。

    这是我上次使用的代码:

    public void CopySelectedSlidesToClipboard() {
      // Construct data format for Slide collection
      DataFormats.Format dataFormat = DataFormats.GetFormat( typeof( List<Slide> ).FullName );
    
      // Construct data object from selected slides
      IDataObject dataObject = new DataObject();
    
      List<Slide> dataToCopy = SelectedSlides.ToList();
      dataObject.SetData( dataFormat.Name, false, dataToCopy );
    
      // Put data into clipboard
      Clipboard.SetDataObject( dataObject, false );
    }
    
    public void PasteSlidesFromClipboard() {
      // Get data object from the clipboard
      IDataObject dataObject = Clipboard.GetDataObject();
      if( dataObject != null ) {
        // Check if a collection of Slides is in the clipboard
        string dataFormat = typeof( List<Slide> ).FullName;
        if( dataObject.GetDataPresent( dataFormat ) ) {
          // Retrieve slides from the clipboard
          List<Slide> slides = dataObject.GetData( dataFormat ) as List<Slide>;
          if( slides != null ) {
            Slides = Slides.Concat( slides ).ToList();
          }
        }
      }
    }