Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
TextBox durch RichTextbox ersetzen
sindibad
myCSharp.de - Member



Dabei seit:
Beiträge: 110

Themenstarter:

TextBox durch RichTextbox ersetzen

beantworten | zitieren | melden

Hallo,
Ich benutze in mein Programm ein TextBox für die die Log-Ausgaben. Der TextBox ist auch editierbar und der Benutzer kann text schreiben.
jetzt muss ich ich aus dem Programm heraus Fehlertext bei Exceptions in rot schreiben.
weil TextBox dies nicht unterstützt, habe ich RichTextBox genommen. RichTextBox funktioniert wieder ganz anderes und ist komplizierter oder mache ich was falsch.
geht es einfacher mit RichTextBox?

Text Schreiben in Log Box mit TextBox:


 logTextBox.Text += time + " " + text + Environment.NewLine;
 logTextBox.ScrollToEnd();
 logTextBox.SelectionStart = logTextBox.Text.Length - 1;

mit RichTextBox:


TextRange tr = new TextRange(logTextBox.Document.ContentEnd, logTextBox.Document.ContentEnd);    
tr.Text = time + " " + text + Environment.NewLine;
tr.ApplyPropertyValue(TextElement.ForegroundProperty, foreGround);

Handler für das editieren in RichTextBox.
TextBox-Code ist auskommentiert


 private void logTextBoxKeyDown(object sender, KeyEventArgs e)
        {
            if (sender.GetType() == typeof(RichTextBox))
            {
                if (e.Key == Key.Return)
                {
                    try
                    {
                        //m_win.m_logFile.logData(">> " + logTextBox.Text.Substring(logTextBox.Text.LastIndexOf(Environment.NewLine) + 1) + " <<");
                        //logTextBox.Text = logTextBox.Text + Environment.NewLine;
                        //logTextBox.SelectionStart = logTextBox.Text.Length;
                        string logTextBox_Text = new TextRange(logTextBox.Document.ContentStart, logTextBox.Document.ContentEnd).Text;
                        m_win.m_logFile.logData(">> " + logTextBox_Text.Substring(logTextBox_Text.LastIndexOf(Environment.NewLine) + 1) + " <<");
                        TextRange tr = new TextRange(logTextBox.Document.ContentEnd, logTextBox.Document.ContentEnd);
                        tr.Text = Environment.NewLine;
                        logTextBox.Selection.Select(logTextBox.Document.ContentEnd, logTextBox.Document.ContentEnd);
                    }
                    catch (Exception ex)
                    {
                        m_win.m_logFile.logData(ex.Message);
                    }
                }
                else
                {
                    try
                    {
                        logTextBox.Selection.Select(logTextBox.Document.ContentEnd, logTextBox.Document.ContentEnd);
                        //logTextBox.SelectionStart = logTextBox.Text.Length;
                    }
                    catch (Exception ex)
                    {
                        m_win.m_logFile.logData(ex.Message);
                    }
                }
            }
        }
private Nachricht | Beiträge des Benutzers
CSharperUser
myCSharp.de - Member



Dabei seit:
Beiträge: 80

beantworten | zitieren | melden

Hallo sindibad,

Eine RichTextBox ist das richtige Control für deine Anforderung, weil - wie du bereits selbst geschildert hast - die einfache TextBox dies nicht unterstützt.

Grundsätzlich musst du beim "Auftreten"/Loggen einer Exception den Text in die Box schreiben und den StartIndex sowie die Länge des Textes innerhalb der Box ermitteln. Anschließend musst du die Infos den Properties SelectionStart und SelectionLength der Box übergeben und entsprechend die SelectionColor setzen.

Dies sollte dir eventuell helfen:RichTextBox Textteile farbig markieren

So wie ich das sehe, verwendest du Windows Forms und nicht WPF.
private Nachricht | Beiträge des Benutzers
sindibad
myCSharp.de - Member



Dabei seit:
Beiträge: 110

Themenstarter:

beantworten | zitieren | melden

Hallo,
danke für die Antwort,
aber wie kommst du darauf, dass ich Windows Forms benutze?
normaleweise benutze ich WPF und keine Windows Forms.
und der WPF-RichTextBox hat keine Eigenschaften wie SelectionStart und SelectionLength !
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15.751

beantworten | zitieren | melden

Die WPF RichTextBox hat ein Document Property.
Der Typ dessen ist zB ein FlowDocument.

FlowDocument selbst hat wiederum die Property Blocks, der man via Add() einfach Paragraph-Element hinzufügen kann. Ein Paragraph wiederum empfängt gerne ein Run-Element, dem man direkt Text eintragen und farbig setzen kann.

Edit: Das ist auch im einzigen Beispiel, das die WPF RichTextBox in der MSDN hat, zu sehen MSDN RichTextBox
[Hinweis] Wie poste ich richtig? 1.1
private Nachricht | Beiträge des Benutzers