WPF CSharp RichTextBox ersetze werte
Hi,
ich will mit WPF eine Richtextbox einlesen und diese mit Platzhaltern versehen, die Platzhalter möchte ich im nachhinein ersetzen...
=> das ganze soll praktisch temporär eingelesen werden und dann je nach Vorgabe anders ersetzt werden (vergleichbar mit Serienbriefen).
wie kann ich werte in einer Richtextbox ersetzen?
z.B.
Sehr geehrte{0} {1},
...
ersetzt wird dann
{0} => " Frau Müller"
oder
{1} => "r Herr Maier"
Vielen Dank
ich will mit WPF eine Richtextbox einlesen und diese mit Platzhaltern versehen, die Platzhalter möchte ich im nachhinein ersetzen...
=> das ganze soll praktisch temporär eingelesen werden und dann je nach Vorgabe anders ersetzt werden (vergleichbar mit Serienbriefen).
wie kann ich werte in einer Richtextbox ersetzen?
z.B.
Sehr geehrte{0} {1},
...
ersetzt wird dann
{0} => " Frau Müller"
oder
{1} => "r Herr Maier"
Vielen Dank
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 365201
Url: https://administrator.de/forum/wpf-csharp-richtextbox-ersetze-werte-365201.html
Ausgedruckt am: 22.12.2024 um 23:12 Uhr
7 Kommentare
Neuester Kommentar
string result = String.Format("Sehr geehrte{0} {1}", var1, var2);
p.s. wenns mehr wird mit den Ersetzungen denke mal über ein Replace mit einer Hashtable von Platzhaltern nach!
mein Problem ist der "Zugriff" auf die RichTextBox...
string _Text = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd).Text;
Servus @it4baer .
Grüße Uwe
// Dictionary mit Ersetzungen
Dictionary<string,string> Replacements = new Dictionary<string,string>();
Replacements.Add("<search1>","<replacement1>");
Replacements.Add("<search2>","<replacement2>");
// Textrange holen
TextRange r = new TextRange(richTextBox1.Document.ContentStart, richTextBox1.Document.ContentEnd)
string strRTF;
// RTF Stream extrahieren
using (MemoryStream ms = new MemoryStream()) {
r.Save(ms,DataFormats.Rtf);
strRTF = Encoding.UTF8.GetString(ms.ToArray());
}
// Ersetzungen vornehmen
foreach (KeyValuePair<string,string> entry in Replacements) {
strRTF = strRTF.Replace(entry.Key, entry.Value);
}
// String in Textrange zurückschreiben
using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(strRTF))) {
r.Load(ms, DataFormats.Rtf);
}
Dein Encoding sollte passen. Zu siehst ja in Zeile 13 und 22 das ich hier UTF8 nutze, also wird das Ergebnis im RTF-Feld letztendlich UTF8 kodiert sein. Damit das in Outlook richtig dargestellt wird muss in Outlook das Encoding ebenfalls passen.
Per Default ist dies "Westeuropäisch ISO". Das lässt sich in den Outlook-Eigenschaften anpassen:
Optionen > Erweitert > Internationale Optionen > "Bevorzugte Kodierung für ausgehende Nachrichten" und "UTF-8 für das Mailto Protokoll zulassen."
Statt UTF-8 kannst du natürlich auch ANSI im Code nutzen mit dem Namespace Encoding.Default.GetBytes().
Per Default ist dies "Westeuropäisch ISO". Das lässt sich in den Outlook-Eigenschaften anpassen:
Optionen > Erweitert > Internationale Optionen > "Bevorzugte Kodierung für ausgehende Nachrichten" und "UTF-8 für das Mailto Protokoll zulassen."
Statt UTF-8 kannst du natürlich auch ANSI im Code nutzen mit dem Namespace Encoding.Default.GetBytes().