Alle Fundstellen, die ich bisher dazu gefunden haben, sagen das gleiche: Der Typ, der in die Zwischenablage kopiert werden soll, muss das ISerializableAttribut besitzen.
Schön und gut, aber die StringCollection sowie alle darin enthaltenen Strings sind mit diesem Attribut versehen (es sind die .NET-eigenen Klassen). Wenn ich die entsprechende Datei über den Windows-Explorer in die Zwischenablage kopiere, enthält diese ebenfalls eine StringCollection mit demselben Eintrag. Aber es kommt keine OutOfMemoryException.
Wenn ich mir so die MSDN-Doku ansehe - gibt es irgendeinen Grund, warum Du nicht SetFileDropList (und entsprechend GetFileDropList beim Auslesen) verwendest?
Weil das alles Synonym ist. SetFileDropList und GetFileDropList kapseln lediglich das zusätzliche Argument und nehmen eine automatische Konverierung in den entsprechenden Typ vor.
Abgesehen davon: zuerst hatte ich diese Methoden verwendet. Das Ergebnis ist immer dasselbe.
Ich habe Deinen Code ausprobiert (1:1, nur für's Compilieren noch einen Cast auf StringCollection eingebaut) und bekomme ebenfalls die Exception. Mit Get/SetFileDropList hingegen funktioniert es tadellos.
Warscheinlich hatte ich schon so viele Kombinationen durch, dass ich gerade GetFileDropList und SetFileDropList in Verbindung miteinander tatsächlich übersehen hatte.
Es funktioniert jetzt und die Kommunikation mit dem Explorer geht auch.
Hallo, so wie ich das sehe versuchst du ein serialisierbares Objekt in die Zwischenablage zu legen, verwendest jedoch "FileDrop", was für Drag & Drop Operationen vorgesehen ist. Link zur Doku. Versuche es mal stattdessen mit
Das hat leider nichts damit zu tun. Der Explorer verwendet ebenfalls dieses Format. Das kann man im Debugger prüfen und GetData(DataFormats.FileDrop) funktioniert in diesem Fall einwandfrei.
Das Problem muss in der SetData-Methode liegen, denn wenn ich irgendetwas anderes, als DataFormats.FileDrop angebe (z.B. "MeineListe"), dann führt auch GetData("MeineListe") nicht zu einer Ausnahme.
Auch ist es nicht mehr möglich mit Windows zu kommunizieren, wenn ich ein anderes Format angebe, weil Windows DataFormats.FileDrop erwartet (nur dann ist der Einfügen-Befehl im Explorer aktiviert).
Ja ups, hast du oben geschrieben. Wer lesen kann... Vielleicht kann man das Ergebnis einem type Object zuweisen statt ein cast auf eine StringCollection zu machen, evtl. kommst du dann dahinter, was für ein Objekt deserialisiert wird.
Der Debugger zeigt, dass die Ausnahme im COM-Modul des Clipboards ausgeworfen wird (noch genauer: in einem OLE-Konverter).
Ich habe also keine Gelegenheit, einen cast zu verwenden.
Hat denn noch niemand versucht, mit WPF eine Anwendung zu schreiben, die aus dem Explorer Dateien einfügen und für den Explorer bereitstellen kann??? Es muss doch eine Möglichkeit geben, ohne gleich die API zu verwenden -- dann funktioniert es nämlich ;-)
Abgesehen davon: zuerst hatte ich diese Methoden verwendet. Das Ergebnis ist immer dasselbe.