Die Funktion ClipBoard.GetText funktioniert nicht

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von DTF.

    Die Funktion ClipBoard.GetText funktioniert nicht

    Hallo zusammen,
    ich habe ein neues Projekt WinForms angefangen. Da gibt es auf der Form einen Button der bei Click ausführen soll

    Dim t as String = ClipBoard.GetText()

    In der Zwischenablage ist eine einfache Zeile Text, aber die Funktion bringt immer nur leeren Text zurück....
    Vollkommen unklar. Woran kann das liegen?

    Grüße - Dietrich
    Probier mal:

    C#-Quellcode

    1. string text = string.Empty;
    2. if(Clipboard.ContainsText())
    3. {
    4. text = Clipboard.GetText();
    5. }
    6. else
    7. {
    8. Debug.WriteLine("Clipboard does not contain text");
    9. }


    Wenn dann was in der Debugausgabe ist, scheinst du keinen "Text" in der Ablage zu haben.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    Hast Du mal den Gegentest gemacht?

    VB.NET-Quellcode

    1. Clipboard.SetText("Foo")
    2. If Clipboard.GetText() = "Foo" Then MessageBox.Show("Clipboard-Set-/GetText funktioniert")
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Die Textzeile bringe ich mit Strg+C in die Zwischenablage. Ich habe ein Zwischenablage-Anzeigeprogramm laufen - da wird der Text exakt angezeigt. Aber mein Code Dim t as String = ClipBoard.GetText() bringt stets leeren Text t = "", egal welchen Text ich in die Zwischenablage kopiere.
    Das beantwortet meine Frage aus Post#3 leider nicht.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hallo: Also ich habe ne Spur.
    Es handelt sich darum, dass "normaler" Text funktioniert.
    Kopiere ich bspw. aus dem Explorer einen Filenamen mit Strg+C, wird er inkl. Pfad im Anzeige Programm angezeigt, aber mittels meines Codes GetText() nicht aus der Zwischenablage ausgelesen....
    Ist das evtl. kein einfaches Textformat, das da in die Zwischenablage kopiert wird?

    Gruß - Dietrich
    Ein Beantworten gestellter Fragen erspart einiges an Frust :huh:

    dherr schrieb:

    Kopiere ich bspw. aus dem Explorer einen Filenamen mit Strg+C
    Um einen Dateinamen zu kopieren, muss man im Datei-Explorer von Windows erstmal in den Dateinamenbearbeitungsmodus gehen, z.B. mit F2. Dann kann man den Namen im gesamten oder Teile davon kopieren. Das Kopieren ohne im Bearbeitungsmodus zu sein kopiert die Datei, nicht den Dateinamen. Dann hast Du ein komplexes Objekt in der Zwischenablage. Das kann zwar smart ausgewertet werden und einige Infos können daraus extrahiert werden. Aber ein Text ist es definitiv nicht. Daher ist auch kein Text mit GetText erhältlich.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @dherr Probiere zunächst

    VB.NET-Quellcode

    1. If Clipboard.ContainsText() Then
    2. ' ...
    3. End If
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    dherr schrieb:

    Kopiere ich bspw. aus dem Explorer einen Filenamen mit Strg+C, wird er inkl. Pfad im Anzeige Programm angezeigt, aber mittels meines Codes GetText() nicht aus der Zwischenablage ausgelesen....


    Hast du etwa die Datei im Clipboard? Datei ist ungleich Text, bzw. Dateiname/Pfad....
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @VaporiZed: Das habe ich probiert. Bei F2 oder Doppelclick wird nur der Dateiname selektiert, den man dann kopieren kann. Die Extension nicht.
    Und ja, diesen Dateinamen kann ich dann mit ClipBoard.Gettext auslesen.

    @Franky: Das habe ich auch probiert mit:

    Quellcode

    1. Dim t As String
    2. Dim ido As IDataObject = Clipboard.GetDataObject()
    3. If ido.GetDataPresent(DataFormats.FileDrop) Then
    4. t = CType(ido.GetData(DataFormats.Text), String)
    5. Else
    6. t = "Could not retrieve data off the clipboard."
    7. End If

    Da wird allerdings kein Zweig der If-Anweisung erreicht...

    Gruß - Dietrich
    @dherr Mach mal folgendes und berichte vom Resultat:

    C#-Quellcode

    1. if(Clipboard.ContainsFileDropList())
    2. {
    3. Debug.WriteLine("Datei(en)");
    4. }
    5. else if(Clipboard.ContainsText())
    6. {
    7. Debug.WriteLine("Text");
    8. }


    dherr schrieb:

    Da wird allerdings kein Zweig der If-Anweisung erreicht...

    Windows versucht das in ein passendes Format zu konvertieren, geht es nicht, bekommst du null(Nothing) von der Funktion.

    PS.
    Hab mal eben geschaut, so kommst du im Falle von Datei(en) im Clipboard an die Dateinamen.

    C#-Quellcode

    1. if (Clipboard.ContainsFileDropList())
    2. {
    3. IDataObject? dataObject = Clipboard.GetDataObject();
    4. if (dataObject != null)
    5. {
    6. string[]? output = (string[]?)dataObject.GetData(DataFormats.FileDrop);
    7. if (output != null)
    8. {
    9. foreach (string data in output)
    10. {
    11. Debug.WriteLine(data);
    12. }
    13. }
    14. }
    15. }

    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „DTF“ ()

    Hallo zusammen,
    probieren geht über studieren:

    Quellcode

    1. Dim tt(0) As String
    2. Dim ido As IDataObject = Clipboard.GetDataObject()
    3. If ido.GetDataPresent(DataFormats.FileDrop) Then
    4. tt = CType(ido.GetData(DataFormats.FileDrop), String())
    5. Else
    6. tt(0) = "Could not retrieve data off the clipboard."
    7. End If

    Jetzt erhalte ich in tt(0) den kompletten Filenamen Pfad,Name,Extension
    Mal sehen, welche der zwei Versionen (VaporiZed, Franky) ich für meinen weiteren Zweck verwende... :)

    Danke an alle Tipp-Geber! :!:
    Grüße - Dietrich