none
VB 2010 filedroplist in my.settings

    Frage

  • Hallo,

    Ich habe ein Problem, ich will eine erweiterte Zwischenablage programmieren, habe aber ein Problem.

    Wenn ich eine String in ein my.settings system.obejct einspiele und das Programm neustarte ist das String immer noch da.

    Wenn ich aber eine Filedroplist in ein my.settings system.obejct einspiele und das Programm neustarte ist das objekt immer leer.

    Gibt es eine Möglichkeit all die my.computer.clipboard Objektarten(Audio, Data, Filedroplist, Image und Text) in ein my.clipboard-Objekt zu bringen, um es beim nächsten Programmstart wieder auszulesen.

    Ich hoffe ihr versteht mich.

    Danke

    Beat2er

    Samstag, 16. August 2014 15:47

Antworten

  • Hallo,
    verstehe ich dich richtig, dass du den Wert, den dir My.Computer.Clipboard zurück gibt abspeichern möchtest, um ihn beim nächsten Programmstart zur Verfügung zu haben?

    Das funktioniert so leider nicht. Das Problem ist, dass der zurück gegebene Wert vom Typ ClipboardProxy ist. Diese kann nicht serialisiert werden.

    Auch mit den .NET Alternativen (Clipboard-Klasse in WinForms und WPF) funktioniert es nicht.

    IMHO bleibt dir nichts anderes übrig als die dir bekannten Formate zu verarbeiten und abzuspeichern und die unbekannten Daten fallen zu lassen.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 16. August 2014 16:12
    Moderator
  • Hallo,

    Tom hat Recht: Die Zwischenablage kann nicht auf direktem Wege gespeichert werden. Denn sie existiert zunächst nur im Speicher.

    Die My.Computer.Clipboard Methoden sind nur eine (überflüssige) Ergänzung und verweisen auf die originäre Clipboard-Klasse  aus Windows Forms.

    Die Ablage über ein allgemeines System.Object funktioniert nicht, da die Settings dann nicht wissen, wie sie die Daten speichern (oder laden) sollen.

    Um z. B. eine FileDropList zu speichern, musst Du sie mit GetFileDropList abrufen und in einer StringCollection ablegen, was wird in den Settings als Typ eingestellt werden kann. Dann kannst Du sie über SetFileDropList wieder herstellen. Wobei das nur funktionieren wird, wenn die Dateinamen, die dort enthalten sind, noch existent sind.

    Für andere Formate wird es aufwändiger. So wirst Du ein Image oder eine Audio-Stream in eine Datei (via FileStream) ablegen müssen und diese wieder in das Clipboard einfügen müssen.

    Bei noch komplexeren Formaten - die über GetData geliefert werden können, ist Clipboard Klasse überfordert. Dafür würde man i. a. einen Clipboard Viewer benötigen, den i. a. durch Anwendungen bereitgestellt werden (Office macht so etwas). Der müsste dann das Speichern und Laden der Daten beherrschen. Ohne gute Kenntnisse des jeweiligen Formats ist da nicht viel zu machen.

    Gruß Elmar

    Samstag, 16. August 2014 16:32
    Beantworter

Alle Antworten

  • Hallo,
    verstehe ich dich richtig, dass du den Wert, den dir My.Computer.Clipboard zurück gibt abspeichern möchtest, um ihn beim nächsten Programmstart zur Verfügung zu haben?

    Das funktioniert so leider nicht. Das Problem ist, dass der zurück gegebene Wert vom Typ ClipboardProxy ist. Diese kann nicht serialisiert werden.

    Auch mit den .NET Alternativen (Clipboard-Klasse in WinForms und WPF) funktioniert es nicht.

    IMHO bleibt dir nichts anderes übrig als die dir bekannten Formate zu verarbeiten und abzuspeichern und die unbekannten Daten fallen zu lassen.


    Tom Lambert - C# MVP
    Bitte bewertet- und markiert Beiträge als Antwort. Danke.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Samstag, 16. August 2014 16:12
    Moderator
  • Danke für die Antwort.

    Gibt es denn eine Möglichkeit die Objekte in eine String zu konvertieren und nachher zurück?

    Das Programm muss die Daten ja nicht bearbeiten sondern nur einlesen und wieder ausgeben(in Clipboard).

    Schade, dass das sonst nicht geht, hoffe aber immernoch eine Alternative zu finden. 


    • Bearbeitet Beat2er Samstag, 16. August 2014 16:20
    Samstag, 16. August 2014 16:16
  • Hallo,

    Tom hat Recht: Die Zwischenablage kann nicht auf direktem Wege gespeichert werden. Denn sie existiert zunächst nur im Speicher.

    Die My.Computer.Clipboard Methoden sind nur eine (überflüssige) Ergänzung und verweisen auf die originäre Clipboard-Klasse  aus Windows Forms.

    Die Ablage über ein allgemeines System.Object funktioniert nicht, da die Settings dann nicht wissen, wie sie die Daten speichern (oder laden) sollen.

    Um z. B. eine FileDropList zu speichern, musst Du sie mit GetFileDropList abrufen und in einer StringCollection ablegen, was wird in den Settings als Typ eingestellt werden kann. Dann kannst Du sie über SetFileDropList wieder herstellen. Wobei das nur funktionieren wird, wenn die Dateinamen, die dort enthalten sind, noch existent sind.

    Für andere Formate wird es aufwändiger. So wirst Du ein Image oder eine Audio-Stream in eine Datei (via FileStream) ablegen müssen und diese wieder in das Clipboard einfügen müssen.

    Bei noch komplexeren Formaten - die über GetData geliefert werden können, ist Clipboard Klasse überfordert. Dafür würde man i. a. einen Clipboard Viewer benötigen, den i. a. durch Anwendungen bereitgestellt werden (Office macht so etwas). Der müsste dann das Speichern und Laden der Daten beherrschen. Ohne gute Kenntnisse des jeweiligen Formats ist da nicht viel zu machen.

    Gruß Elmar

    Samstag, 16. August 2014 16:32
    Beantworter
  • Danke

    Schade

    Samstag, 16. August 2014 16:42