Toon posts:

[C#] RichTextBox met kleurtjes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hmm, 'k probeer bepaalde regels in een RichTextBox een kleurtje te geven. Het is niet zo dat er voortdurend gekeken moet worden naar welke kleur een bepaald stuk tekst moet krijgen, het enige wat er moet gebeuren is dat op het moment dat er een regel bij komt die regel gekleurd moet worden met een bepaalde kleur. Nou lukt dat wel, maar als er dan een regel bij komt dan veranderd de kleur van de tekst daarvoor weer, en dat is niet helemaal de bedoeling. Ik gebruik de volgende code om dit te doen.
code:
1
2
3
4
5
6
7
8
9
1. int start = txtLog.Text.Length;
2. txtLog.Text = txtLog.Text + templogstring + "\n";
3. txtLog.Select(start, txtLog.Text.Length - start);
4. txtLog.SelectionColor = entry.section ==
Interlink_XP.SecurityRule.Sections.FTPServer ?
MonitorSettings.FTPColor : entry.section ==
Interlink_XP.SecurityRule.Sections.Management ?
MonitorSettings.ManagementColor : MonitorSettings.MonitorColor;
5. txtLog.Select(txtLog.Text.Length, 0);

Er horen nog een aantal andere bewerkingen bij, maar die zijn verder niet van belang. Iemand een idee hoe het komt dat als er nu een regel bij komt dat de vorige regels dan allemaal dezelfde kleur worden en alleen het nieuwe regeltje in de goede kleur wordt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Kun je uw code even aanpassen, zodanig dat de layout niet volledig de soep ingedraaid wordt.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Zo beter? Heb er maar ffies nummertjes voor gezet zodat het een beetje duidelijk is wat bij elkaar hoort.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Eh, ik vind het nu nogal onduidelijk en vooral niet leesbaar.

Tip: http://gathering.tweakers.net/forum/list_messages/392390/#netcoden

Wat je moet doen is, de gewenste text selecteren en die dan van kleur veranderen. Als je daarna een regel bij typed, dan moet je ook de tekst die je daarvoor had bijgetyped (en dus een ander kleur heeft) ook selecteren lijkt me...

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hmmz, op het moment dat je een stuk tekst selecteert en daar een kleur aan toewijst wordt in de RTF code toch om het geselecteerde stuk tekst een code heen gezet die aangeeft dat het in een bepaalde kleur moet zijn. Dus het lijkt mij dan dat dat permanent is, maar blijkbaar is dat dus niet. Maar ook alle vorige stukken tekst selecteren wordt iets ingewikkelder.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Je kunt toch gewoon de positie bijhouden waar je je eerste regel typed en dan vanaf daar selecteren?

https://fgheysels.github.io/


Verwijderd

Topicstarter
Jawel, maar 'k gebruik drie kleuren en in principe kan elke regel weer een andere kleur krijgen, dus dan moet ik steeds bij houden welke kleur welke regel moet hebben, dat is niet echt effeciënt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Is txtLog uw RichTextBox?

Moet je niet zo werken:
code:
1
2
txtLog.SelectedText = txtLog.Select(..);
txtLog.SelectionColor = Color.Red;

't is ook maar een gok hoor, heb niet echt tijd om iets uit te proberen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hmmz, volgens de beschrijving van txtLog.Select() zou die functie een stuk tekst moeten selecteren (of de control zelf, maar dat is een overload). Volgens mij is de selectedtext een read-only property, maar dat weet ik niet zeker. Bovendien werkt het kleuren dus wel, maar wordt het niet helemaal zoals het zou moeten, want alleen de laatste regel krijgt de goede kleur.

Ennuhm, txtLog is inderdaad de RichTextBox waar het om gaat.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Het is geen read-only property.
SelectedText Overridden. Gets or sets the selected text within the RichTextBox

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hmmz, okeej, maar
code:
1
txtLog.SelectedText = txtLog.Select(start, txtLog.Text.Length - start);

geeft een fout:
code:
1
Cannot implicitly convert type 'void' to 'string'

Dat is het dus blijkbaar niet, ik ga eens ffies kijken wat er met de Rtf property gebeurd.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:11
Hmm, ja. Select returned dus void.

https://fgheysels.github.io/


Verwijderd

Topicstarter
Hmmz, 'k heb nog even gekeken zonder dat het programma de selectie weghaald, en hij selecteert toch echt alleen het nieuwe stukje tekst, dus zou ik verwachten dat ook alleen dat stukje tekst een nieuwe kleur krijgt, maar dat is dus niet zo. Het gaat dus ongeveer zo (testje wat ik net uitgevoerd heb).

Stap 1:
-------
groen

Stap 2:
-------
groen
groen

Stap 3:
-------
groen
groen
blauw

Stap 4:
-------
groen
groen
groen
groen

Maar de bedoeling is dus dat die 3de regel gewoon blauw blijft, maar dat doet ie dus niet :(.

Verwijderd

Topicstarter
Niemand nog een tip?

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-09 14:04

Creepy

Tactical Espionage Splatterer

Je kent de txtlog.text property rechtstreeks toe. Daarin staat dacht ik alleen je normale tekst, zonder opmaak. Als je deze dus compleet aanpast (wat jij dus doet), ben je dus al je opmaak kwijt.

Is het niet mogelijk om de tekst op een andere manier uit te breiden???

Jaja.. delphi code... I know.. maar you'll get the idea:
code:
1
2
3
4
5
// Nu ben ik al mijn opmaak kwijt!
richedit.text:=richedit.text+'blaat';

// En nu niet!!!
richedit.lines.add('blaat');

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Hmmz, de lines property bestaat wel, maar er is geen Add method dus die kan 'k niet gebruiken. Ennuhm, als alle opmaak verloren zou gaan dan zou ik toch weer allemaal zwarte tekst moeten hebben? Maar dat is dus niet het geval hier.

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 06-09 14:04

Creepy

Tactical Espionage Splatterer

Kan zijn dat de laatst of eerst ingestelde opmaak wordt gebruikt voor de gehele .text property

Er is helaas geen directe link tussen de .text en de opmaak van deze tekst (althans.. in Delphi/CBuilder dus).

Heb je geen lines->append o.i.d?? Gok maar wat hoor.. ik ken C# niet...

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Verwijderd

Topicstarter
Hmmz, 'k heb het nu opgelost. Het bleek da'k de AppendText method van de RichTextBox moest gebruiken in plaats van txtLog.Text = txtLog.Text + <nieuwe text>. Blijkbaar gaat de opmaak niet verloren als je txtLog.AppendText(<nieuwe text>) gebruikt. Weer wat geleerd :).
Pagina: 1