Benutzer mit den meisten Antworten
Richtextbox Speichern

Frage
-
Hallo,
ich habe nun meine Richtextbox mit den Bindings fertig gestellt.
Ich möchte dessen Inhalt nun einer Klasse zuweisen, habe aber festgestellt, dass es keine Texteigenschaft gibt.
Es wird nur eine feste Speicherung vorgeschlagen.
Kann ich dies irgendwie auch als Variable speichern, oder muss ich den Speicherort und das Format speichern?
Antworten
-
Hallo,
ob du nun besser das FlowDocument im Arbeitsspeicher behältst oder etwas anderes kann ich nicht so pauschal sagen. Effizienter dürfte das FlowDocument sein, aber wie gesagt: hier musst du mit den Verweisen aufpassen, sodass du die Instanz nicht einfach einem zweiten Control zuweist. Bei einem anderen Format hast du durch den Konvertierungsprozess diese Probleme nicht - dafür braucht jeder Speicher-/Lade-Vorgang etwas Zeit.
Die Konvertierung müsstest du dort statt finden lassen wo du die String-Darstellung oder was auch immer haben möchtest. Also dort wo du aufhören möchtest das FlowDocument zu nutzen.
Encoding.Default ist das Encoding was das Betriebssystem für ANSI verwendet - also quasi der Windows-Standard. Es gibt aber auch noch andere die du nutzen kannst. Die darauf aufgerufenen Methoden geben ein Byte-Array bzw. einen String vom jeweils anderen Zurück. Da in verschiedenen Kodierungen die Zeichen verschiedene Byte-Folgen haben ist es hier wichtig beim kodieren und enkodieren jeweils die selbe Kodierung einzusetzen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Sonntag, 4. Oktober 2015 08:41
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 9. Oktober 2015 10:12
Alle Antworten
-
Hallo,
da die RichTextBox etwas mehr als nur Text enthält wird das Ganze auch etwas komplexer gehandhabt. Die RTB enthält zunächst ein FlowDocument, dieses findest du in der Document-Eigenschaft. Dieses kannst du an sich weiter geben. Dabei ist zu beachten dass das FlowDocument immer nur innerhalb einer TextBox angezeigt werden kann. Passe also ggf. mit den Verweisen auf.
Du kannst daraus aber auch ein anderes Format erzeugen. Beispielswiese kannst du XAML daraus machen, wie du es auch direkt in der RichTextBox schreiben könntest, oder aber RTF wie es im gleichnamigen Dateiformat verwendet wird. Siehe dazu: How to convert FlowDocument to rtf
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Es gibt keine RTF-Variable oder Eigenschaft in dem was ich dir verlinkt habe. Hier nochmal ein Beispiel wie du den RTF-Code bekommst:
var doc = rtb.Document; var content = new TextRange(doc.ContentStart, doc.ContentEnd); using (var stream = new MemoryStream()) { content.Save(stream, DataFormats.Rtf); var rtfString = Encoding.Default.GetString(stream.ToArray()); }
Und so kannst du es wieder zuweisen:var content = new TextRange(doc.ContentStart, doc.ContentEnd); using (var stream = new MemoryStream(Encoding.Default.GetBytes(rtfString))) { if (content.CanLoad(DataFormats.Rtf)) { content.Load(stream, DataFormats.Rtf); } }
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hallo,
ob du nun besser das FlowDocument im Arbeitsspeicher behältst oder etwas anderes kann ich nicht so pauschal sagen. Effizienter dürfte das FlowDocument sein, aber wie gesagt: hier musst du mit den Verweisen aufpassen, sodass du die Instanz nicht einfach einem zweiten Control zuweist. Bei einem anderen Format hast du durch den Konvertierungsprozess diese Probleme nicht - dafür braucht jeder Speicher-/Lade-Vorgang etwas Zeit.
Die Konvertierung müsstest du dort statt finden lassen wo du die String-Darstellung oder was auch immer haben möchtest. Also dort wo du aufhören möchtest das FlowDocument zu nutzen.
Encoding.Default ist das Encoding was das Betriebssystem für ANSI verwendet - also quasi der Windows-Standard. Es gibt aber auch noch andere die du nutzen kannst. Die darauf aufgerufenen Methoden geben ein Byte-Array bzw. einen String vom jeweils anderen Zurück. Da in verschiedenen Kodierungen die Zeichen verschiedene Byte-Folgen haben ist es hier wichtig beim kodieren und enkodieren jeweils die selbe Kodierung einzusetzen.
Tom Lambert - .NET (C#) MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Moderator Sonntag, 4. Oktober 2015 08:41
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Freitag, 9. Oktober 2015 10:12
-
Hallo R3turnz,
Ich gehe davon aus, dass Toms Antworten Dir weitergeholfen haben. Solltest Du noch Rückfragen dazu haben, gib bitte Bescheid.
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.