[VB.NET] Kleur tekst aanpassen in RichEdit *

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Hallo,
Weet iemand hoe ik met een code automatisch de kleur van een bepaald woord in een RichTextBox aan kan passen? Ik dacht zelf aan deze code:

If RichTextBox1.Text = "test" Then
RichTextBox1.ForeColor = System.Drawing.Color.Red
End if

Maar dan wordt ineens alle tekst rood.

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 18:53

RayNbow

Kirika <3

Ik heb niet zoveel verstand van VB.NET, maar ik denk dat de RTF Textbox nog steeds hetzelfde werkt als in VB6:
 
Visual Basic:
1
2
3
4
    RichTextBox1.SelStart = 3
    RichTextBox1.SelLength = 3
    RichTextBox1.SelColor = vbRed
    RichTextBox1.SelLength = 0


Oftewel, gebruik de SelStart, SelLength en SelColor properties :)

EDIT:
Niet dus... het is dus anders in VB.NET:
Visual Basic .NET:
1
2
RichTextBox1.Select(2, 3)
RichTextBox1.SelectionColor = System.Drawing.Color.Red

[ Voor 24% gewijzigd door RayNbow op 29-06-2003 15:40 . Reden: VB.NET toevoeging ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Oke, maar dan wordt standaard teken ... t/m teken ... rood? Ik wil juist dat een bepaalde invoer rood wordt, en niet een vast gedeelte.

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 18:53

RayNbow

Kirika <3

Dan moet je dus gaan zoeken in de tekst van de RTF Textbox met InStr.

Visual Basic .NET:
1
2
3
RichTextBox1.Text = "Hallo het woordje rood is gekleurd"
RichTextBox1.Select(InStr(1,RichTextBox1.Text, "rood") - 1, 4)
RichTextBox1.SelectionColor = System.Drawing.Color.Red


In dit voorbeeldje wordt echter alleen het eerste voorkomen van het woord rood gekleurd, dus aan jou de taak om door de tekst van de RTF box heen te lopen :)

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
hmm, het werkt wel, maar als het is de bedoeling dat het automatisch rood wordt, wanneer het woord getypt wordt, en niet als het er al staat :s?

[ Voor 79% gewijzigd door Jannis op 29-06-2003 16:11 ]


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Gebruik dan de OnKeyPress of OnChange events... en zoek de eerste spatie op VOOR de positie van de huidige locatie. Kijk of alles NA de spatie voldoet aan je woord, en maak dit rood...

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Ik geloof dat ik je niet helemaal begrijp. Ten eerste, bedoel je met die onChange / onKeyPress event de naam achter Private Sub RichTextBox1_...()? Daar moet toch TextChanged staan? En de eerste spatie, bedoel je dat gewoon met die .Select codes van hierboven?

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Ik heb even geen vb.net bij de hand, maar het zijn inderdaad de events die bij de RichTextBox horen, zoals de TextChanged....
Met de spatie bedoel ik het volgende:

Je wilt het woord test rood maken tijdens het typen in de RTB1 control.
Dit kan je dan doen als volgt: (
1 Bij het event TextChanged vraag je op op welke positie je cursor momenteel zit (RTB1.selectionpostion (of zo iets)
2 Vervolgens doe je via InstrRev opvragen waar de eerste spatie zit voor de huidige positie. (intPosSpace)
3 Met behulp van de huidige positie en de positie waar de spatie zich bevind, vraag je het woord op welke er tussen staat.
4 Je controleer of dit het woord test is
5 Zo ja:
Visual Basic .NET:
1
2
RichTextBox1.Select(intPosSpace+1, intCurrentPos-intPosSpace-1)
RichTextBox1.SelectionColor = System.Drawing.Color.Red


Als je nu de volgende tekst intypt in je RTB:
"Gaat deze test lukken?"

zal de textchanged event na elke letter die je intypt gelanceerd worden.
Op het moment dat je test nu hebt getyped gebeurt er het volgende: (kijkend naar bovenstaande stappen)
1 intCurrentPos = 14
2 intPosSpace = 9
3 strCurrentWord = Mid(RTB1.TExt, intPosSpace+1,intCurrentPos)
4 strCurrentWord = "test" en dus goed
5 :
Visual Basic .NET:
1
2
RichTextBox1.Select(intPosSpace+1, intCurrentPos-intPosSpace-1)
RichTextBox1.SelectionColor = System.Drawing.Color.Red

Het woord test zal nu rood worden....

Ik hoop dat dit een beetje duidelijk en te begijpen is...

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 18:53

RayNbow

Kirika <3

NTGiant: Maar wat als iemand een stuk tekst van het klembord in de RTF box plakt? Dan zou jouw aanpak alleen het laatste voorkomende woord kleuren.

Toevoeging: Ook werkt jouw aanpak niet als het woord aan het begin van de RTF Box wordt getypt, dan is er namelijk geen spatie voor het woord.

[ Voor 34% gewijzigd door RayNbow op 29-06-2003 23:26 . Reden: toevoeging ]

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


  • Limhes
  • Registratie: Oktober 2001
  • Laatst online: 19-08 19:06
RayNbow schreef op 29 June 2003 @ 23:24:
NTGiant: Maar wat als iemand een stuk tekst van het klembord in de RTF box plakt? Dan zou jouw aanpak alleen het laatste voorkomende woord kleuren.

Toevoeging: Ook werkt jouw aanpak niet als het woord aan het begin van de RTF Box wordt getypt, dan is er namelijk geen spatie voor het woord.
Hoe zitten dan bestaande 'realtime' syntax-coloring codes in elkaar? Die zullen toch niet na elke keypress alle woorden gaan checken... Lijkt me nogal lang duren bij een groot stuk code.
Ik heb er ook ooit eens een proberen te maken, maar door zingebrek heb ik em niet afgemaakt, mede doordat er veel problemen bij kwamen kijken zoals je in het voorbeeld al zegt; een stuk tekst vanuit het clipboard plakken enz.

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

die gebruiken gewoon gene RTF editor; kan wel hoor. Maar dan moet je iig zelf RTF code gaan generen dat scheelt al een stuk. Het lijkt me beter als je de colorcoding code gewoon zlef gaat schrijven :-) Bijvoorbeeld door een descentant te maken van de gewon memo editor en daar WM_PAINT WM_NCPAINT e.d. te omschrijven :)

Als het geen bezwaar is heb ik nog wel *ergens* de syntax highlighting code in Delphi van de voorloper van evrsoft 1st page 2000.

[ Voor 19% gewijzigd door alienfruit op 30-06-2003 01:08 ]


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
RayNbow schreef op 29 juni 2003 @ 23:24:
NTGiant: Maar wat als iemand een stuk tekst van het klembord in de RTF box plakt? Dan zou jouw aanpak alleen het laatste voorkomende woord kleuren.

Toevoeging: Ook werkt jouw aanpak niet als het woord aan het begin van de RTF Box wordt getypt, dan is er namelijk geen spatie voor het woord.
Je kan natuurlijk afvangen als je geen positie van een spatie terug kan vinden, dat je dan intPosSpace = 0

OP het probleem op te lossen wanneer er text in de box geplakt wordt kan je het volgende doen:
Bij Het TextChanged event plaats je de RTB1.Text in een variabele. Bij de volgende TextChanged controleer je of het verschil in lengte groter is dan 1. dan weet je dat er geplakt of geknipt is...

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
alienfruit schreef op 30 June 2003 @ 01:03:
die gebruiken gewoon gene RTF editor; kan wel hoor. Maar dan moet je iig zelf RTF code gaan generen dat scheelt al een stuk. Het lijkt me beter als je de colorcoding code gewoon zlef gaat schrijven :-) Bijvoorbeeld door een descentant te maken van de gewon memo editor en daar WM_PAINT WM_NCPAINT e.d. te omschrijven :)

Als het geen bezwaar is heb ik nog wel *ergens* de syntax highlighting code in Delphi van de voorloper van evrsoft 1st page 2000.
Ik ben hier wel geinteresseerd in... kan je mij die mailen ofzo???

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
De code zelf geeft 3 fouten aan, intPosSpace, intCurrentPos en weer intPosSpace. RTB1.SelectionPosition is geen code, ik heb geprobeerd de juiste code hiervoor te vinden, maar geen enkele code achter Selection... duidt een positie aan. Weet jij misschien welke code ik hiervoor WEL zou moeten gebruiken?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Je kan toch gewoon in de msdn kijken bij alle attributes en properties van een RTB??

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
In de MSDN April 2003, de MSDN van Visual Studio .NET 2003 of de online MSDN:s?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Jannis schreef op 30 June 2003 @ 10:13:
In de MSDN April 2003, de MSDN van Visual Studio .NET 2003 of de online MSDN:s?
Degene die je het makkelijkst uitkomt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Hm, ik heb net ff in de MSDN hier gekeken, maar ik kom bij het topic 'RichTextBox Properties' nergens iets met positie tegen, en al die codes intPosSpace enz. ook niet:s?

  • RayNbow
  • Registratie: Maart 2003
  • Laatst online: 18:53

RayNbow

Kirika <3

Gebruik RichtTextBox.SelectionStart. Deze staat inderdaad niet in de MSDN. Het is een property die bij de ComboBox, MonthCalendar, en TextBoxBase hoort. De RichTextBox erft de SelectionStart property van de TextBoxBase.

Je kan deze info vinden in de MSDN onder "RichTextBox class"

Ipsa Scientia Potestas Est
NNID: ShinNoNoir


Verwijderd

Als je aleen

RichTextBox1.SelectionColor = System.Drawing.Color.Red

doet

wordt dan niet alle nieuwgetikte tekst automatisch rood net als in vb6 ?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Toch staat hij er echt tussen hoor. Een RichTextBox heeft een property SelectionStart. Dat is toch niet zo moeilijk te vinden? En als je echt niet snapt waarom intPosSpace niet werkt zul je denk toch eens een keer een goed boek moeten kopen imo.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
RayNbow schreef op 30 June 2003 @ 11:04:
Gebruik RichtTextBox.SelectionStart. Deze staat inderdaad niet in de MSDN. Het is een property die bij de ComboBox, MonthCalendar, en TextBoxBase hoort. De RichTextBox erft de SelectionStart property van de TextBoxBase.

Je kan deze info vinden in de MSDN onder "RichTextBox class"
Bij mij staat hij anders wel degelijk in de msdn.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Ik heb een boek over VB.NET hier liggen, waarvan de uitgever zegt dat het goed is, maar echt veel staat er niet in, over RichTextBox's staan alleen hoe je die maakt enz...

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Jannis schreef op 30 June 2003 @ 11:19:
Ik heb een boek over VB.NET hier liggen, waarvan de uitgever zegt dat het goed is, maar echt veel staat er niet in, over RichTextBox's staan alleen hoe je die maakt enz...
Enig idee hoe 'groot' VB.Net is, met al z'n namespaces, etc? In zo'n boek staat alleen de basis in. Voor de rest zul je zelf moeten zoeken naar artikelen, op MSDN, etc.

Verder is het een beetje zinloos om in een boek iedere property, etc te beschrijven. Voor zover ik weet heeft iemand het al voor elkaar gekregen om alleen over het datagrid(!) al een boek te schrijven)

[ Voor 22% gewijzigd door gorgi_19 op 30-06-2003 11:22 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Jannis schreef op 30 June 2003 @ 11:19:
Ik heb een boek over VB.NET hier liggen, waarvan de uitgever zegt dat het goed is, maar echt veel staat er niet in, over RichTextBox's staan alleen hoe je die maakt enz...
Ja oke maar als je de basis van een programeertaal ( Hier dus VB.NET ) kent dan zijn dit dingen die je gewoon met de Documentatie uit kunt zoeken. En dat van intPosSpace heeft totaal niks met een RichTextBox te maken dus dat ligt blijkbaar toch echt aan je kennis van VB.NET. intPosSpace wordt in het voorbeeld namelijk gebruikt om uit te rekenen waar een spatie in je RichtTextBox voorkomt. Dit is dan een variabele die je zelf gedeclareert hebt en is dus geen member van RichTextBox. Dus is het ook logisch dat er niks over in de MSDN staat.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Binnen dit verband wil ik ook nog even hierop wijzen: curry684 in "Naam van een ListBox-item"

'Zoeken voordat je een topic opent' houdt ook in dat je MSDN Library Online kunt dromen.

Professionele website nodig?


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Jannis schreef op 30 juni 2003 @ 09:59:
De code zelf geeft 3 fouten aan, intPosSpace, intCurrentPos en weer intPosSpace. RTB1.SelectionPosition is geen code, ik heb geprobeerd de juiste code hiervoor te vinden, maar geen enkele code achter Selection... duidt een positie aan. Weet jij misschien welke code ik hiervoor WEL zou moeten gebruiken?
Zoals ik al zei, ik heb geen vb.net tot mijn beschikking, dus je moet het even zelf vertalen...
Die intPosSpace en intCurrentPos zijn eigen variabele die je moet declareren... en vullen uiteraard

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
ok.

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Zo, ik ben er nu wel uit denk ik. Voorlopig plaats ik onderaan wel een knopje 'inkleuren' ;), dan kan ik in alle rust doorzoeken naar de juiste codes...

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Ja hoor je mag het best wel hebben van me, als ik het nog kan vinden (daz namelijk code uit 1997 :))
Overigens stond er een tijd terug nog een artikel in de Delphi Magazine hierover; ik zal kijken in welke issue het stond. Weet je in iedergeval welke diskette je moet downloaden van http://www.thedelphimagazine.com/ :)

http://www.thedelphimagazine.com/disks/dmag83.zip (Code van het voorbeeld voor syntax highlighting uit DelphiMagazine July 2002)

[ Voor 26% gewijzigd door alienfruit op 30-06-2003 17:00 ]


  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Ik begrijp niet helemaal wat je bedoelt. Ten eerste is de inhoud van die dmag83.zip geen VB.NET source maar een andere taal? en daarnaast hebben die files volgens mij niks hiermee te maken:s

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
Jannis schreef op 30 June 2003 @ 20:39:
Ik begrijp niet helemaal wat je bedoelt. Ten eerste is de inhoud van die dmag83.zip geen VB.NET source maar een andere taal? en daarnaast hebben die files volgens mij niks hiermee te maken:s
Dat was voor mij bedoelt, dat is een stukje Delphi.... offtopic dus...

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Ik geloof dat http://www.thedelphimagazine.com/samples/1465/1465.htm is waar jij het over had, dat syntax higlighting?

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Jup. Maar wat in Delphi kan ook in VB.NET :)

  • DukeMan
  • Registratie: Mei 2000
  • Niet online
alienfruit schreef op 30 June 2003 @ 21:28:
Jup. Maar wat in Delphi kan ook in VB.NET :)
Lijkt me toch wel, anders schop ik VB.net er toch snel uit :P

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
Ja, maar VB.NET gebruikt (lijkt mij) toch hele andere codes dan Delphi?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 20-08 11:40

gorgi_19

Kruimeltjes zijn weer op :9

Jannis schreef op 01 July 2003 @ 13:12:
Ja, maar VB.NET gebruikt (lijkt mij) toch hele andere codes dan Delphi?
Mja.. Delphi, VB.Net... Alleen imho een syntax verschil... Achterliggende ideeen / gedachten, moeten imho niet zo veel verschillen....

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • DukeMan
  • Registratie: Mei 2000
  • Niet online
gorgi_19 schreef op 01 July 2003 @ 13:55:
[...]

Mja.. Delphi, VB.Net... Alleen imho een syntax verschil... Achterliggende ideeen / gedachten, moeten imho niet zo veel verschillen....
Inderdaad, volgens mij kan je zo goed als dezelfde dingen...

  • Jannis
  • Registratie: Oktober 2001
  • Laatst online: 08-07 22:25
ok,

  • whoami
  • Registratie: December 2000
  • Nu online
Ok.

P&W is wel wat meer dan een persoonlijke helpdesk. Zoals je in onze FAQ kunt lezen, wordt er hier op P&W ook wel wat zelfwerkzaamheid verwacht. Dit houdt in dat er van je verwacht wordt dat je zelf ook de moeite neemt om dingen uit te zoeken, en P&W niet beschouwt als een persoonlijke helpdesk ofzo.
Dit topic draait daar gewoon op uit (is het eigenlijk al geworden), en verzand gewoon. Vandaar : dicht.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.