Avatar billede publicperson Nybegynder
11. december 2002 - 17:39 Der er 13 kommentarer

Hvordan læser jeg fra en RichTextBox?

Hvordan læser jeg ordet til venstre og til højre for cursorens aktuelle placering?

Meget gerne noget kode :)
Avatar billede Lasse Novice
11. december 2002 - 17:53 #1
du bliver noedt til at laese HVER karakter... indtil du moeder et space. Lidt omsonst, men saadanne er det.
Hvis du skal aendre et eller andet saa skal du foerst selectere det, og derefter kan du aendre dets attributter. Jeg ved at det intet med det har at goere, men det er noget jeg selv har haft boevl med
Avatar billede Lasse Novice
11. december 2002 - 17:57 #2
this.richTextBox1.Select(0,1);
            this.richTextBox1.SelectedText
Avatar billede Lasse Novice
11. december 2002 - 18:00 #3
sorry her:
            int i = this.richTextBox1.SelectionStart;
            this.richTextBox1.Select(i,1);
            string word = "";

            while (this.richTextBox1.SelectedText != " ")
            {
                word += this.richTextBox1.Select(i++,1);
            }
Avatar billede Lasse Novice
11. december 2002 - 18:03 #4
det var et svar
int i = this.richTextBox1.SelectionStart;
this.richTextBox1.Select(i,1);
string word = "";

while (this.richTextBox1.SelectedText != " ")
{
    this.richTextBox1.Select(i++,1);
    word += this.richTextBox1.SelectedText;
}

            System.Windows.Forms.MessageBox.Show(word);
Avatar billede publicperson Nybegynder
11. december 2002 - 19:19 #5
Er det virkelig den bedste løsning? det må da kunen gøre en smule smukkere... eller har Microsoft da sovet lidt i timen :s
Avatar billede Lasse Novice
11. december 2002 - 19:47 #6
jeg og en anden har siddet og haft noejagtig det samme problem som dig. Vi har ogsaa revet vores haar ud over at der ikke findes en bedre maade. Jeg tror dog ikke at microsoft har sovet i timen, de har bare ikke lagt disse funktionaliteter ind. Hvis alle disse ting er til stede:

1) Du virkelig skal processere en masse tekst
2) Brugeren behoever ikke se det.
3) Tiden er ikke den vigtigste faktor.
4) Du vil have et nemmere interface til at behandle teksten.

Saa foreslaar jeg at du opretter en instans af word, og laegger RTF dokumentet derind i. Herinde har du rige muligheder for alskens ting, samtidig med at du har poweren fra .NET.
Avatar billede publicperson Nybegynder
11. december 2002 - 19:52 #7
Faktisk er tiden den aller vigtigste faktor :(
Avatar billede z42cool Nybegynder
12. december 2002 - 09:10 #8
Hvad med noget i retning af:

//Bryd teksten op i en streng før markøren og en efter
string stringBefore = rtb.Text.Substring(0, rtb.SelectionStart);
string stringAfter = rtb.Text.Substring(rtb.SelectionStart);

//Find positionerne af hhv. sidste og første ' ' i de to strenge
int indexBefore = stringBefore.LastIndexOf(' ');
int indexAfter = stringAfter.IndexOf(' ');

//Find de to ord
string wordBefore = stringBefore.Substring(indexBefore);
string wordAfter = stringAfter.Substring(0, indexAfter);
Avatar billede z42cool Nybegynder
12. december 2002 - 09:12 #9
Eller endnu bedre da du sparer to kald til Substring:

//Find positionerne af hhv. sidste og første ' ' i de to strenge
int indexBefore = rtb.Text.LastIndexOf(' ', 0, rtb.SelectionStart);
int indexAfter = rtb.Text.IndexOf(' ', rtb.SelectionStart);

//Find de to ord
string wordBefore = rtb.Text.Substring(indexBefore);
string wordAfter = rtb.Text.Substring(0, indexAfter);
Avatar billede Lasse Novice
12. december 2002 - 16:37 #10
Ahhh, jeg implementerer en allerede eksisterende funktion. Ikke desto mindre, vil du nok skulle - med den nye smartere funktion - skulle bruge IndexOfAny ogsaa soege paa "End of line" og space, da ordet jo sagtens kan vaere i starten af en linie. Ydermere er der de to ord som ligger i slutningen og i starten som du skal finde en smart metode til at finde(evt. indsaette space i slutningen og i starten inden du soeger, og bagefter slette dem igen)
Avatar billede z42cool Nybegynder
13. december 2002 - 09:45 #11
Gooky>> Jeg kan godt se EOF problematikken, men den kan som du selv foreslår så løser IndexOfAny det elegant:

//Find positionerne af hhv. sidste og første ' ' i de to strenge
char[] matchChars = new char[]{' ', '\n'};
int indexBefore = rtb.Text.LastIndexOfAny(matchChars, 0, rtb.SelectionStart);
int indexAfter = rtb.Text.IndexOfAny(matchChars, rtb.SelectionStart);
Avatar billede z42cool Nybegynder
13. december 2002 - 09:47 #12
Det er rigtigt at som publicperson beskriver det er han interesseret i ordet hhv. lige før og lige efter markørens position. Han forstæller ikke hvordan vi skal håndtere det hvis vi står midt i et ord. Skal det ord vi står i med, skal det være wordBefore eller wordAfter eller skal vi finde ordet lige før det ord og ordet lige efter det ord vi står i. Alle scenarierne kan løses med simpel streng manipulation, men jeg gider ikke lave algoritmen før publicperson svarer :-)
Avatar billede z42cool Nybegynder
30. januar 2003 - 20:54 #13
Hallo - publicperson!!!! Er du der????
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester