Richtextbox - Hoe controleer ik op vetgedrukte tekst?

Status
Niet open voor verdere reacties.

Tommiiee

Gebruiker
Lid geworden
6 feb 2010
Berichten
93
Hallo allemaal.

Ik heb een Richtextbox waar je bijv. tekst van Word kunt inplakken. Nu ben ik op zoek naar een controle die kan zien of een bepaald woord vetgedrukt is. Die woorden wil ik namelijk vervangen voor een andere tekst.

Ik lees nu al heel de Richtextbox uit, en splits de tekst d.m.v. spaties. Zo krijg ik dus alle woorden in een array, maar van die woorden (nu dus strings) kan ik niet opvragen of deze bold zijn of niet.

Weet iemand hoe ik dit kan bereiken?

Mvg,
Tom
 
Ik dacht aan iets van de tekst inlezen, splitten met een spatie --> naar een string-array.
En daarna kijken of de tekst (elk woord) in de array gelijk is (aan het woord in de tekst), zoja selecteer dat woord (die tekst), en kijk of de geselecteerde tekst de font ''bold'' heeft. Zoja, verander dan de tekst.

Helpt dit een beetje?
 
Ik dacht aan iets van de tekst inlezen, splitten met een spatie --> naar een string-array.
En daarna kijken of de tekst (elk woord) in de array gelijk is (aan het woord in de tekst), zoja selecteer dat woord (die tekst), en kijk of de geselecteerde tekst de font ''bold'' heeft. Zoja, verander dan de tekst.

Helpt dit een beetje?
Nog niet echt..

Het eerste gedeelte heb ik (t/m string array). Maar hoe moet ik nu op voorhand weten welke woorden vetgedrukt zullen zijn?
 
Maar hoe moet ik nu op voorhand weten welke woorden vetgedrukt zullen zijn?

Ik dacht hier aan (door mij gemaakt:rolleyes:), TXT2 = de richtextbox:

Code:
            string a = TXT2.Text;
            string[] test = a.Split(' ');

            int teller = 0;

            for (int i = 0; i < test.Length; i++)
            {
                TXT2.Select(teller, test[i].Length);
                if (TXT2.SelectionFont.Bold)
                {
                    TXT2.SelectionColor = Color.Crimson;
                }

                teller += (test[i].Length + 1);
            }

Helpt dat je wat meer op weg?

Anders kijk even hier:
http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.selectionfont.aspx
 
Laatst bewerkt:
Ha, thanks! Werkt op zich goed, op een enkel dingetje na:

Als ik deze tekst heb:

Hallo lieve mensen daar

En ik vervang 'lieve' (omdat het vetgedrukt is), met een ander woord, dan slaat hij het het woord 'mensen' opeens over.. Weet jij misschien waarom? Ik kan er d.m.v. debuggen maar niet achterkomen waarom dit gebeurd.
 
Weet jij misschien waarom? Ik kan er d.m.v. debuggen maar niet achterkomen waarom dit gebeurd.

Als je lieve vervangt met een woord van dezelfde lengte, gaat het goed. Maar als je het vervangt met een woord korter of langer dan het woord, is de lengte van de regel ineens langer/korter geworden en de posities van de woorden veranderd.. Ik heb veel dingen geprobeerd incl. omgekeerd lezen (van achter naar voren) en ik kom er nog steeds niet uit.
 
Laatst bewerkt:
Als je lieve vervangt met een woord van dezelfde lengte, gaat het goed. Maar als je het vervangt met een woord korter of langer dan het woord, is de lengte van de regel ineens langer/korter geworden en de posities van de woorden veranderd.. Ik heb veel dingen geprobeerd incl. omgekeerd lezen (van achter naar voren) en ik kom er nog steeds niet uit.
Ah zo..

Dat is wel erg vervelend, want mijn bedoeling is eigenlijk dat het áltijd een langer woord wordt.. :(
 
Het is nog gelukt :)

Code:
string a = TXT2.Text;
            string[] test = a.Split(' ');

            int teller = 0;

            for (int i = 0; i < test.Length; i++)
            {
                TXT2.Select(teller, test[i].Length);
                if (TXT2.SelectionFont.Bold)
                {
                    selected = "<b>" + selected + "</b>";
                    woorden[i] = selected;
                    teller -= 7;
                }

                teller += (test[i].Length + 1);

Het gedeelte:
Code:
teller -= 7;
is er dus bijgekomen.

Het getal 7 komt van het aantal karakters dat ik bij het 'selected' woord doe (<b> + </b> = 7 karakters).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan