Clipboard - Falsches Format beim Zwischenspeichern

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Clipboard - Falsches Format beim Zwischenspeichern

    Ich möchte einen mehrzeiligen Text einer Richtextbox in die Zwischenablage kopieren. Das funktioniert auch mit folgendem Befehl ohne Probleme.

    VB.NET-Quellcode

    1. Clipboard.Clear()
    2. Clipboard.SetText(RichTextBox1.Text, TextDataFormat.Text)


    Allerdings scheint das zwischengespeicherte Format des Textes ein anderes zu sein, als das ursprüngliche der Richtextbox. Das hat zur Folge, dass beim anschließenden Kopieren z.B. in den Editor der Text nicht mehr richtig dargestellt wird. Die einzelnen Zeilen werden nicht untereinander dargestellt, sondern quasi als Bandwurmsatz in einer Reihe nebeneinander. Hinzu kommen typische, nicht gewollte Zeichen im Text, die wohl durch das falsche Format entstehen.

    Wie schaffe ich es, dass die Formatierung des Strings in der Richtextbox beim Zwischenspeichern nicht verloren geht?
    Bei der SetText Methode gibt es leider keine Plain-Eigenschaft. In meinem Fall ist es wichtig, dass exakt das selbe Format übernommen wird, da ich den Text hinterher in einen Skript Interpreter einfüge, der eben ein bestimmtes Format voraussetzt. Der Interpreter formatiert den Text in Code.

    Gibt es ansonsten eine Möglichkeit einen beliebigen String in ein beliebiges Format zu konvertieren? Mit den System.text.encoding Sachen bin ich leider bis jetzt nicht weiter gekommen.
    Doch hat sie. Wenn ich per Strg + C den Text in die Zwischenablage kopieren lassen funktioniert es auch wunderbar. Jeodch nicht über den .NET Aufruf.


    Ich möchte sozusagen den Text genau so in die Zwischenablage kopieren wie er in der Textbox dargestellt wird. Mit allen Absätzen, dem Format etc...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Sev7eNup“ ()

    Dein Problem hab ich verstanden, und ich meinte, dass du vielleicht anstatt nach einer richtigen Formatierung zu suchen, die originale übernimmst. Ungefähr so:

    Clipboard.SetText(RichTextBox1.Text, RichTextBox1.Format)

    Habe nur keine Ahnung, ob das ohne weiteres funzt - Vielleicht kann man da irgendwie vor sich hin zum richtigen Ergebnis konvertieren?

    MfG,
    X-Zat / Momo
    Ich hätte da noch eine Idee: Du gehst deinen String einfach Zeichen für Zeichen durch und achtest dabei auf Format-relevante Zeichen wie die NewLine oder eine Einrückung.

    Spoiler anzeigen
    Dim Ausgabe As String
    For Each BST As Char In MeinText.ToArray
    If BST = Chr(<Hier ASCII-Index eines Zeilenumbruches...>) Then 'Der Char ist ein Zeilenumbruch!
    Ausgabe+=vbNewLine '.ToString?
    ElseIf BST = Chr(9) Then 'Der Char ist ein TAB!
    Ausgabe+= <Hier VB-Beschreibung eines Tabs>
    Else
    Ausgabe+=BST '.ToString?
    End If
    Next


    Bin gerade mit Chrome online, Chrome gibt den VB-Tag leider falsch wieder... Bzw. VB-Tags mit Chrome sind (Achtung, Ironie) unformatiert... Habe auch leider grade kein VB zur Hand...
    Wär doch ein Lösung bzw. ein Versuch wert, oder?

    MfG,
    X-Zat / Momo
    das hier könnte funzen:

    VB.NET-Quellcode

    1. Clipboard.SetText(tagBox1.Text.Replace(chrw(13),Environment.NewLine))

    Die Sache ist, dass Richtextbox Zeilen nur mit chr(13) abschließt, aber viele Betriebssysteme oder auch Editoren als Zeilenabschluß chr(13) & chr(10) erwarten (oder REihenfolge annersrum-kannichmir nie merken)