Autor |
Beitrag |
erfahrener Neuling
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Mi 02.03.16 11:50
Hallo,
ich sitze grad an einem Programm, wo ich mehrmals Text einer RichTextBox hinzufüge (also nicht manuell eingebe).
Nun wollte ich es so machen, das bei bestimmten Exceptions die Fehlermeldung in roter Farbe hinzugefügt wird.
Am einfachsten hielt ich es, dies mit .ForeColor zu erledigen
C#-Quelltext 1: 2: 3: 4: 5: 6:
| catch (Exception E) { richTextBoxOut.ForeColor = Color.Red; richTextBoxOut.Text += "ERROR: " + E.Message; richTextBoxOut.ForeColor = Color.Black; } |
Das hat aber nicht funktioniert. Auch in anderem Kontext hat sich mit ForeColor nichts geändert. Ich weiß, dass es auch mit markiertem Text der TextBox funktionieren soll, mir gefällt die Lösung mit ForeColor aber deutlich besser.
Hier also meine Frage: Wie setze ich .ForeColor richtig ein, um allgemein die Farbe des anzuzeigenden Textes einer Textbox zu ändern?
Mfg
Neuling
Zuletzt bearbeitet von erfahrener Neuling am Do 03.03.16 09:26, insgesamt 1-mal bearbeitet
|
|
Th69
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 02.03.16 13:23
Hallo und
du mußt den Bereich vorher selektieren, z.B. mittels
C#-Quelltext 1: 2:
| richTextBox.SelectionStart = 0; richTextBox.SelectionLength = 42; |
und danach dann dessen Attribute (z.B. die Farbe) ändern.
Für diesen Beitrag haben gedankt: erfahrener Neuling
|
|
erfahrener Neuling 
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Mi 02.03.16 14:21
Hi danke erstmal für deine schnelle Antwort.
Ja das mit Text-Selection hab ich auch schon gesehen.
Meine Frage richtete sich aber eher wirklich nach .ForeColor.
BSP: Ich will, dass meine TxtBox immer nur roten Text anzeigt, egal welcher. Dann müsste es doch mit ForeColor möglich sein (?), nur verändert es nichts.
Wozu kann ich's dann also gebrauchen/wie verwenden, wenn es scheinbar nichts verändert?
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 02.03.16 14:25
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mi 02.03.16 14:42
Du hast die ForeColor auf Black gesetzt also ist jeder Text der nicht per rtf markierung was anderes darstellen möchte schwarz.
Wenn du individuell formatierten Text willst mußt du eigentlich rtf sprechen und nicht einfach nur PlainText. Trotzdem in diesem speziellen Fall reicht es wenn du, wie TH69 schon geantwortet hat, den Text den du anpassen willst zu markieren(selektierung) und dann die Farbe der Selektion(SelectionColor) änderst.
|
|
erfahrener Neuling 
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Mi 02.03.16 15:01
Also ich hab es jetzt mal mit selection versucht. Ergebnis war, dass die Fehlermeldung zwar korrekt in rot angezeigt wurde, aber wenn ich danach eine weitere 'normale' Ausgabe in schwarzem Text provoziere, färbt sie sich automatisch wieder schwarz.
hier der code dazu:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| catch (Exception E) { richTextBoxOut.Select(richTextBoxOut.TextLength, E.Message.Length); richTextBoxOut.SelectionColor = Color.Red; richTextBoxOut.AppendText("ERROR: " + E.Message); richTextBoxOut.Select(); } |
Wie kann ich das jetzt verstehen? ich hab sonst im Text nirgendwo anders select oder foreColor verwendet.
PS: Zu foreColor: hab ich jetzt verstanden und hat sich auch erledigt damit.
Danke für die Antworten, haben mir geholfen (mein Problem ist nur noch nicht gelöst  )
|
|
erfahrener Neuling 
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Mi 02.03.16 15:36
Also nochmal zur Beschreibung: Ich hab eine RichTextBox, die nur zum anzeigen dient, d.h. ich füge dieser per Button Text bei, gebe diesen aber nicht selber ein. Dieser Text soll ganz normal in schwarz angezeigt werden (passiert auch so).
Kommt es zu besagter Exception, soll diese ebenfalls der RichTextBox hinzugefügt werden, markiert und rot gefärbt werden(funktioniert so weit).
Danach soll wieder per Button-Druck Text in schwarz hinzugefügt werden, bei Exception wieder in rot, usw.
Bei mir ist es jetzt so, dass nach einer roten Exception bei neuem Text/oder neuer Exception die vorherige Exception wieder schwarz wird.
Also muss ich irgendwas beim 'selecten' falsch gemacht und/oder etwas nicht verstanden haben.
hier nochmal etwas mehr code:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| private void buttonStart_Click(object sender, EventArgs e) { String Abfrage = ... String connectionString = "...";
FbConnection connection = new FbConnection(connectionString);
try { connection.Open(); try { richTextBoxOut.Text += "\n\n>>>NEW QUERY<<< (" + Abfrage + ")\n\n"; executeCommand(Abfrage, connection); } catch (Exception E) { richTextBoxOut.Select(richTextBoxOut.TextLength, E.Message.Length); richTextBoxOut.SelectionColor = Color.Red; richTextBoxOut.AppendText("ERROR: " + E.Message); richTextBoxOut.Select(); }
connection.Close();
} ... }
private void executeCommand(String query, FbConnection connection) { FbCommand cmd = new FbCommand(query, connection); FbDataReader DataReader = cmd.ExecuteReader(); while (DataReader.Read()) { for (int i = 0; i < DataReader.FieldCount; i++) { richTextBoxOut.Text += DataReader[i]; richTextBoxOut.Text += "\t"; } richTextBoxOut.Text += "\n"; } DataReader.Close(); richTextBoxOut.Text += "\nDatareader closed."; } |
FRAGE: Wie erreiche ich es, dass Fehlermeldungen konstant rot bleiben, egal was danach der TxtBox hinzugefügt wird?
Bitte nochmal dringend um Hilfe!
|
|
Th69
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mi 02.03.16 17:35
Hallo,
wie (bzw. wo) setzt du denn die Schriftfarbe wieder auf Schwarz?
Dein Selektierungscode kommt mir aber auch ein wenig komisch vor, da du jetzt ja erst selektierst und dann erst nachträglich den Fehlertext hinzufügst (mag aber sein, daß es trotzdem so korrekt funktioniert, weil erst in der Nachrichtenschleife der RichTextBox der Code dafür ausgeführt wird).
|
|
erfahrener Neuling 
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Do 03.03.16 09:36
Hi,
ich hab heut früh nochmal ein bisschen rumprobiert. Ergebnis war das gleiche wie gestern
@Th69 Zitat: | wie (bzw. wo) setzt du denn die Schriftfarbe wieder auf Schwarz? |
Muss ich doch gar nicht, oder? Ich will ja nur den markierten Text färben, aber dauerhaft.
Also, wie kann ich den dauerhaft gefärbt lassen?
ODER
Falls das nicht geht, wie kann ich die Positionen der alten Nachricht bei der neuen Selektierung mit angeben?
ODER
Ist richTextBox gänzlich unfähig, Text(auch wenn er nicht markiert ist) gefärbt zu lassen?
Hoffentlich kann mich jemand aufklären
Gruß
der Neuling
EDIT:
Hab grad rausgefunden, dass das ganze ja auch mit AppendText funktioniert
C#-Quelltext 1:
| richTextBoxOut.AppendText(E.Message, Color.Red); |
allerdings dort das Gleiche, der Text BLEIBT einfache nicht rot.
|
|
jasocul
      
Beiträge: 6393
Erhaltene Danke: 147
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Do 03.03.16 10:47
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| catch (Exception E) { richTextBoxOut.Select(richTextBoxOut.TextLength, E.Message.Length); richTextBoxOut.SelectionColor = Color.Red; richTextBoxOut.AppendText("ERROR: " + E.Message); richTextBoxOut.Select(); } |
Ich bin kein C#-Experte, aber das kann nicht funktionieren.
Dein Select fängt am Ende des Textes an und wählt ab da die Anzahl der Zeichen deines neuen Textes aus, der noch gar nicht vorhanden ist.
Folglich ist die Länge des gewählten Textes "0". Du hast nichts im Text ausgewählt. Dadurch kann auch nichts gefärbt werden.
Also erst die Textlänge merken.
Dann den Text hinzufügen.
Dann das Select mit der gemerkten Textlänge und der Länge des neuen Textes ausführen.
Danach die Farbe auf den selektierten Bereich anwenden.
Abschließend den selektierten Bereich wieder aufheben.
Sollte das immer noch nicht funktionieren, würde ich erstmal prüfen, ob der Text mit diesem Verfahren überhaupt selektiert wird und dann schrittweise den Source ergänzen.
|
|
erfahrener Neuling 
      
Beiträge: 233
Erhaltene Danke: 19
Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
|
Verfasst: Do 03.03.16 11:53
Ne also das mit dem markieren hat schon geklappt. Ich kann ja mal versuchen, die Logik meines handelns zu erläutern.
C#-Quelltext 1: 2: 3: 4:
| richTextBoxOut.Select(richTextBoxOut.TextLength, E.Message.Length); |
C#-Quelltext 1: 2:
| richTextBoxOut.AppendText("ERROR: " + E.Message); richTextBoxOut.Select(); |
UPDATE: jetzt funktioniert (ich habe nichts verändert!) es, dass hintereinanderkommende Fehlermeldungen rot angezeigt werden.
Normaler Text dagegen färbt alles wieder schwarz. :confused:
Ich habe mal 2 Bilder des Outputs als Anhang mal mit dazu gepackt.
FAZIT: Ist ja jetzt ganz egal, wie ich was geschrieben habe. Ich möchte, wie es in der eigentlichen Fragestellung steht, ein Bsp., wie man dauerhaft gefärbten Text in einer richTextBox erhält (muss doch möglich sein).
Danke schonmal im vorraus!
Einloggen, um Attachments anzusehen!
|
|
|